我使用運行在Express服務器上的許多項目,無論它們是前端(即React.js)代碼庫還是服務器端Node.js
codebases
。在JavaScript項目中對多個環境使用NODE_ENV
很多次與前端codebases
我會加載條件配置基於NODE_ENV
,如前端請求的restful API的URL。
我很多次也用NODE_ENV有條件地加載的東西像服務器端Node.js
項目DB配置。
在一個包含開發,分期和生產(3個環境)的項目中,我通常會設置我的代碼以基於將NODE_ENV
設置爲3個環境中的任何一個來加載配置(也可能是「本地「)。
我最近的工作對指的是生產環境的項目「活」。
當我決定設置NODE_ENV =活這樣的環境中,一個同事指出,這種方法的一個重大缺陷。
似乎Express和Node.js的一些其他庫會鎖定事實,即您將使用「生產」或「開發」作爲您的環境NODE_ENV
,並且爲您的環境使用其他名稱可能會產生意想不到的效果。
例如,Express需要NODE_ENV=production
才能在「生產」模式下運行。根據Express文檔「測試表明,只是這樣做可以將應用程序性能提高三倍!」
基本上,我很好奇是否將NODE_ENV
設置爲「開發」和「生產」以外的值,就像我在項目中一樣。
我覺得,如果我要部署我的代碼,在雲開發或升級的環境中,我不認爲他們應該在不同的快車「模式」相比,生產環境中運行。
是否更有意義,以保持配置從NODE_ENV
分開?
例如,它是有意義的基礎配置過的變量像APP_ENV
,同時確保NODE_ENV
或者是「發展」或「生產」的frameworks/packages
喜歡快車。
看來你建議NODE_ENV應該堅持「開發」或「生產」,並且可以通過另一種方式加載配置(即爲每個項目環境添加一個獨特的dotenv文件)。這是有道理的,但我仍然覺得我經常在野外看到基於NODE_ENV的配置。以環回爲例,https://loopback.io/doc/en/lb2/Environment-specific-configuration.html#overview。他們在文檔中提到,您可以使用NODE_ENV = staging並設置一個config.staging.json文件。我並不是說這是正確的,但它似乎相當普遍。 – seansean11
它可能在野外存在,它可能對非生產環境有效,但由於許多庫在「NODE_ENV」設置爲「production」時啓用優化,因此您應該確保已爲生產環境設置了該設置。 – Mobius
@ seansean11你在尋找不同的答案嗎?就最佳實踐而言,對許多軟件包不使用「NODE_ENV = production」是非常不明智的。我不知道你是否在使用它們,但它是行業最佳實踐。 – Mobius