Я пытаюсь создать виджет, который будет размещен на сторонних сайтах. Некоторые из внешних файлов будут зависеть от необходимости вытаскивать из разных источников в разных средах, то есть в процессе разработки, он должен вытаскивать некоторые файлы с локального хоста, при постановке он должен вытащить их из staging-domain.com, а в процессе производства он должны вытащить их из www.xyz.comBrunch Как вы делитесь/смешиваете код, который изменяется в зависимости от того, где работает готовое приложение (приложение является виджетами для сторонних сайтов)?
Мой хак решение заключается в следующем -
в 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, я делаю так следующим образом
i п my_model.coffee
:
some_attribute: namespacedApp.APIHost
Я уверен есть лучший путь ... любые указатели/помощь с благодарностью!
EDIT
я нашел еще один способ сделать это. Я могу поставить ту же функцию 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()
Теперь сноска доступен везде в приложении. Все еще не уверен, что это лучшее решение. Любые другие предложения?