早午餐如何根据完成的应用程序运行位置(app是第三方网站的小部件)共享/混合代码?

时间:2012-07-27 03:44:28

标签: brunch

我正在尝试构建一个将托管在第三方网站上的小部件。它所依赖的一些外部文件需要从不同环境中的不同来源中提取,即在开发中,它应该从localhost中提取一些文件,在暂存时应该从staging-domain.com中提取它们,并在生产中,它应该从www.xyz.com拉出来

我的黑客解决方案如下 -

application.coffee中的

prodApiHost = 'http://productionhost.com/api'

@APIHost = do ->
  if ( window.location.port.match(/^3/) || window.location.host.match(/^(localhost)/i) || window.location.host.match(/xyz.staging/i ))
    if window.location.host.match(/^(localhost)/i) || window.location.port.match(/^3/)
      window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/api'
    else
      window.location.protocol + '//' + window.location.host + '/api'
  else
    prodApiHost

然后,在我需要使用该URL的模型中,我按如下方式进行操作

my_model.coffee中的

some_attribute: namespacedApp.APIHost

确定有更好的方法......任何指针/帮助都非常感谢!

修改

我找到了另一种方法。我可以在APIHost文件中添加相同的initialize.coffee函数,如下所示:

application = require 'application'
application.prodApiHost = 'http://productionhost.com/api'

$ ->
  application.APIHost = do ->
    if ( window.location.port.match(/^3/) || window.location.host.match(/^(localhost)/i) || window.location.host.match(/xyz.staging/i ))
      if window.location.host.match(/^(localhost)/i) || window.location.port.match(/^3/)
        window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/api'
      else
        window.location.protocol + '//' + window.location.host + '/api'
    else
      application.prodApiHost

application.initialize()
Backbone.history.start()

现在,应用程序中的fn随处可用。仍然不确定这是最好的解决方案。还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

我会创建一个小早午餐插件,用于检查是否已启用缩小(确定生产环境)(config.minify)并将其添加

if (window.brunch == null) window.brunch = {};
window.brunch.environment = ... (development / production)

然后检查您的应用

if (window.brunch.environment === 'production') {...} else {...}

我认为分离dev / prod环境是一件非常普遍的事情,并且有点早午餐会为此目的获得“环境”抽象。