我正在尝试构建一个将托管在第三方网站上的小部件。它所依赖的一些外部文件需要从不同环境中的不同来源中提取,即在开发中,它应该从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随处可用。仍然不确定这是最好的解决方案。还有其他建议吗?
答案 0 :(得分:0)
我会创建一个小早午餐插件,用于检查是否已启用缩小(确定生产环境)(config.minify
)并将其添加
if (window.brunch == null) window.brunch = {};
window.brunch.environment = ... (development / production)
然后检查您的应用
if (window.brunch.environment === 'production') {...} else {...}
我认为分离dev / prod环境是一件非常普遍的事情,并且有点早午餐会为此目的获得“环境”抽象。