0

サードパーティのサイトでホストされるウィジェットを作成しようとしています。依存する外部ファイルの一部は、さまざまな環境のさまざまなソースからプルする必要があります。つまり、開発では、ローカルホストからいくつかのファイルをプルする必要があり、ステージングでは、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 に答える