0

我正在尝试构建一个将托管在 3rd 方网站上的小部件。它所依赖的一些外部文件需要从不同环境中的不同来源中提取,即在开发中,它应该从 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 在应用程序中随处可用。仍然不确定这是最好的解决方案。还有其他建议吗?

4

1 回答 1

0

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

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

然后签入您的应用

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

我认为分离 dev / prod 环境是一件非常普遍的事情,并且在早午餐中将为此目的接收“环境”抽象。

于 2012-07-29T04:10:27.220 回答