2016-09-19 40 views
4

我正在通過polymer init starter-kit使用應用程序模板中的聚合物構建Web應用程序。在Polymer應用程序中設置階段特定環境的首選方法是什麼?

我有一些階段特定的環境變量,如後端API入口點。有這些環境變量的行爲:

<script> 
    EnvBehavior = { 
    properties: { 
     apiBaseUrl: { 
     type: String, 
     // value: '//some-url.com'  // production 
     value: 'http://localhost:8000' // development 
     } 
    } 
    }; 
</script> 

而且apiBaseUrl被其他元素使用:

<dom-module id="my-element"> 
    <template> 
    <iron-ajax url="{{apiBaseUrl}}/foo" method="POST" 
      content-type="application/x-www-form-urlencoded" 
      body="{{requestBody}}" handle-as="json" 
      on-response="onResponse" on-error="onError"></iron-ajax> 
    </template> 
    <script> 
    Polymer({ 
     is: 'my-element', 
     properties: { 
     requestBody: {foo: 'bar'} 
     }, 
     behaviors: [EnvBehavior], 
     onResponse: function(e) { 
     console.log(e.detail.response); 
     }, 
     onError: function(e) { 
     console.log(e.detail.request.xhr.response); 
     } 
    }); 
    </script> 
</dom-module> 

這工作。但是我想爲apiBaseUrl的默認值//some-url.com構建一個應用程序,該應用程序在代碼中註釋掉了。如何在構建時間上有效地設置階段特定的變量?我使用聚合物cli來建造;運行polymer build

+0

我不認爲聚合物構建具有任何此類功能。你將不得不編寫自己的腳本來處理這個問題 – a1626

回答

5

因爲它看起來像你已經在使用一個單獨的JS文件實施EnvBehavior,你可以做到以下幾點。創建該文件的多個版本,例如:

  • env-behavior.js(本地),
  • env-behavior.js.stage(舞臺),和
  • env-behavior.js.production(用於生產)。

顯然,在每個文件中加入適當的配置值。

有了這個,當你使用polymer serve時,一切都應該與本地版本一起工作(因爲在沒有完成文件交換時默認包含它)。但是,當您爲特定環境構建時,只需在部署到生產時用env-behavior.js.production覆蓋env-behavior.js即可。

爲了交換文件,您可以創建手動構建後吞吐任務,甚至通過更改polymer-build代碼來自定義polymer build命令。

另外,我想強烈建議agains使用客戶端檢查選擇適當的配置值,這是因爲:

  • 代碼是更復雜的
  • 它引入了不必要的開銷
  • 每個人都可以看到其他配置值(例如其他環境的位置,然後可以被惡意用戶作爲目標)
  • 它看起來不對。
1

沒有任何功能可以讓您使用polymer-cli來做到這一點。

,而無需手動更改apiBaseUrl房地產開發和生產,你可以發現它在運行的環境

例:

properties: { 
    apiBaseUrl: { 
     type: String, 
     value: function() { 
      if (window.location.hostname === 'localhost') { 
       return 'http://localhost:8000'; 
      } else { 
       return '//some-url.com'; 
      } 
     } 
    } 
} 
相關問題