2012-02-08 123 views

回答

426

運行你的應用程序之前,可以在控制檯做到這一點,

export NODE_ENV=production 

或者,如果你在Windows下你可以試試這個:

SET NODE_ENV=production 

,或者你可以像這樣運行你的應用程序:

NODE_ENV=production node app.js 

您還可以設置它在你的js文件:

process.env.NODE_ENV = 'production'; 

但我不建議在運行時文件中這樣做,因爲在服務器中打開VIM並將其更改爲生產並不容易。您可以在目錄中創建config.json文件,並且每次運行應用程序時,都會從中讀取並設置配置。

+0

輝煌,謝謝! – 2012-02-17 16:10:58

+9

這是個不好的建議。從應用程序本身可靠地設置'process.env.NODE_ENV'會很棘手。最好按照丹尼爾的鏈接在下面設置你的環境變量。 – 2013-09-09 19:55:15

+9

我很喜歡每次運行應用程序都顯式設置NODE_ENV,如第二個例子('NODE_ENV = production node app.js')。這樣,如果忘記將本地'NODE_ENV'設置回'development',那麼您可能會將自己從未來的某些髮型中拯救出來。 – Jon 2014-02-15 19:52:21

21
heroku config:set NODE_ENV="production" 
+1

啊這是我需要的。你真棒 – 2014-06-17 23:07:09

+5

'NODE_ENV = production'現在是Heroku node.js部署中的默認設置。 – cyanbeam 2016-08-01 23:54:15

+0

OP沒有要求Heroku,但無論如何,謝謝! – 2016-10-04 08:50:20

67

中的package.json:

{ 
    ... 
    "scripts": { 
    "start": "NODE_ENV=production node ./app" 
    } 
    ... 
} 

然後在終端中運行:

npm start 
+1

不要在package.json中放入一堆腳本,這是不好的做法,因爲你引入了不一致性,並且它在你的項目中不可用。我知道很多人創建腳本來運行grunt或gulp,但是不要那麼做 – PositiveGuy 2015-07-08 03:34:06

+33

@WeDoTDD你在說什麼?這些腳本的使用方式與makefile的工作方式類似。使用它作爲這個例子,或者你所說的運行gulp是一個完全合理的用例。對於簡單的任務,我現在甚至不使用gulp並在腳本內部完成所有工作,而且讓webpack執行過去通過gulp完成的工作要快得多。 – 2015-11-09 03:03:09

+1

因爲最終所有項目的腳本文件不一致都是維護噩夢 – PositiveGuy 2015-11-09 14:02:36

35

export NODE_ENV=production是壞的解決方案,它重啓後消失。如果你想不擔心變了

- 將其添加到該文件:

/etc/environment 

不使用出口的語法,只寫(在新的生產線,如果有些內容已經存在):

NODE_ENV=production 

它在重新啓動後工作。您將不必再在任何地方重新進入出口NODE_ENV =生產命令,只需使用節點任何你想要 - 永遠,PM2 ...

對於Heroku的:

heroku config:set NODE_ENV="production" 

這實際上是默認的。

+2

維護噩夢。那麼你沒有權限/ etc的方塊呢? – 2016-06-16 21:41:32

+1

我個人使用'NODE_ENV = production gulp bundle-production-app'來捆綁生產就緒腳本,在服務器中NODE_ENV在服務器環境中,在開發機器中它不在那裏。在一些機器中,如果它沒有設置,並且你希望它設置爲* always *,那麼它是噩夢。在某些情況下,你希望沒有它,所以你不加。無論如何,當做UI時,我會清楚它是否處於開發模式,所以如果它處於開啓或關閉狀態,您都不會有任何疑問。如果NODE_ENV是!==生產,它在你的臉上,你在其他模式,所以根本沒有噩夢。所有清楚,都很好。 – 2016-07-12 10:08:10

+0

+1因爲談論如何使它堅持下去。我想知道有多少人只在本屆會議上認爲它會持續下去。在*重新啓動之前*怎麼樣?如果你想立即設置它,你應該把它放在'/ etc/environment' *並且*運行'export NODE_ENV = production'? – Nateowami 2017-01-23 16:03:05

0

如果你在窗戶上。在正確的文件夾打開CMD,然後第一

set node_env={your env name here} 

敲回車,然後你可以用

node app.js 

啓動節點,它將與您的env設置

+1

重啓後不會消失嗎?沒有窗戶,不能嘗試自己。 – 2016-03-05 06:26:17

+0

如果您詢問節點重新啓動否,它將不會消失,直到完全關閉命令提示符。但是,如果Windows Server重新啓動,它會消失。談論操作系統重啓時的 – garenyondem 2016-03-05 11:14:39

+2

。這就是爲什麼我更好地找到另一種方法來停止想知道每次安裝Windows更新,或只是任何重新啓動,一次又一次地解決這個問題。 – 2016-03-06 12:17:53

26

在沒有人提到.env現在還沒有開始呢?在您的應用程序根目錄中創建一個.env文件,然後require('dotenv').config()並讀取值。輕鬆更換,輕鬆閱讀,跨平臺。

https://www.npmjs.com/package/dotenv

5

在OSX我建議增加export NODE_ENV=development~/.bash_profile和/或~/.bashrc和/或~/.profile

我個人將該條目添加到我的~/.bashrc,然後導入該文件的內容,因此它在各個環境中保持一致。

完成這些添加後,請務必重新啓動終端以獲取設置。

3

適用於Windows PowerShell如果您在應用程序中使用的WebPack使用此命令

$env:NODE_ENV="production" ; node app.js 
1

,你可以簡單地將其設置在那裏,用DefinePlugin ...

plugin部分

所以,設置在NODE_ENVproduction

plugins: [ 
    new webpack.DefinePlugin({ 
    'process.env.NODE_ENV': '"production"', 
    }) 
] 
2

無需擔心在Windows,Mac或Linux上運行腳本是否安裝了cross-env軟件包。然後你可以很容易地使用你的腳本,例如:

"scripts": { 
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js", 
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js" 
} 

海量道具給這個包的開發者。

相關問題