2016-03-01 36 views
4

爲了解決來自Redux的警告背後的問題,我偶然發現了the advice,它解釋了在使用React或Redux來生成針對生產使用進行優化的構建時,envifying是必需的步驟。 Envifying被解釋爲用諸如'production'等實際值代替節點特定環境變量(例如process.env.NODE_ENV)的過程。envifying客戶端庫有什麼意義?

接受envifying是必要的,並且上面的解釋是真實的,它讓我感到困惑,因爲它似乎假定客戶端庫(如React和Redux)將包含特定於節點的環境變量。是的,我知道這些庫尤其適合構建同構/通用JavaScript應用程序,但會發現令人驚訝。我正確理解這一點?如果是的話,那麼我需要知道process.env.NODE_ENV在節點外使用的模式的解釋嗎?

如果我正確理解這個建議,它會提示如果我使用Webpack,我可能想要使用像這樣的插件,如DefinePlugin

new webpack.DefinePlugin({ 
    "process.env.NODE_ENV": process.env.NODE_ENV, 
    }), 

似乎這還需要我的NODE_ENV變量設置爲目標環境中的建設我想生產爲我的客戶端代碼。這是非常奇怪的,因爲我在構建服務器上設置了一個環境變量,以反映實際代碼在其部署到的服務器上運行的環境。

所有這些讓我覺得我錯過了一般模式的東西。

相關信息:

回答

3

你可以生產和發展建立/爲Web應用程式的條件呢!正如你所提到的,許多同構JS框架利用它。

envify用於幫助在兩種主要方式爲使用process.env

  1. 刪除任何需要的代碼墊片,以支持它 - Browserify擁有自動一個大約2KB〜打卡,並能物。
  2. 縮減大小代碼更好 - 當代碼變得像if ("development" === "production")良好的minifier可以剝離出來完全

記住的WebPack是所有關於改變你(一般來說,客戶端)代碼。添加一些東西來實質上查找 - 替換process.env的所有實例都在其用例中,並且可以在不引入新API的情況下創建基於環境的行爲。在您的webpack.config中設置其值與在操作系統上設置環境變量確實沒有什麼不同。

+0

謝謝您確認此案。如果在其他不適用於服務器的客戶端框架中使用'process.env',我會很好奇。 – jpierson