2012-07-27 8 views
0

Я пытаюсь создать виджет, который будет размещен на сторонних сайтах. Некоторые из внешних файлов будут зависеть от необходимости вытаскивать из разных источников в разных средах, то есть в процессе разработки, он должен вытаскивать некоторые файлы с локального хоста, при постановке он должен вытащить их из 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() 

Теперь сноска доступен везде в приложении. Все еще не уверен, что это лучшее решение. Любые другие предложения?

ответ

0

Я бы создать небольшой бранч плагин, который будет проверять, если Минимизация включена (для определения производства окр) (config.minify) и сделать его добавить

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

, а затем проверить в приложении

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

Я думаю, что разделение сред dev/prod - очень обычная вещь, и в бит-бранч будет получать абстракцию «окружения» для этой цели.

 Смежные вопросы

  • Нет связанных вопросов^_^