2012-06-19 35 views
89

我正在嘗試關注NodeJs上的教程。我不認爲我錯過了任何東西,但每當我打電話給process.env.NODE_ENV時,我得到的唯一價值是未定義的。根據我的研究,默認值應該是「發展」。這個值是如何動態設置的?它最初是在哪裏設置的?process.env.NODE_ENV未定義

+0

設置NODE_ENV爲Heroku的應用程序,你可以使用:'Heroku的配置:設置NODE_ENV =「生產」' –

+3

雖然答案下面將通過設置環境變量,這裏的大課暫時解決問題應該是你永遠無法知道是否會設置任何環境變量......所以,請相應地編寫代碼並測試它是否已設置,如果是,請執行以下操作。不要對此做出假設。 –

回答

124

process.env是對你的環境的引用,所以你必須在那裏設置變量。

要設置environment variable in Windows

SET NODE_ENV=development 

在OS X或Linux

export NODE_ENV=development 
+0

這個工作,只在我的OS X上,'EXPORT'一詞需要小寫。謝謝。 – basheps

+3

您可能會補充說,如果未設置NODE_ENV,則應用程序的行爲與「開發」模式相同 – Rocco

+1

對於Linux,vi〜/ .bash_profile,然後插入NODE_ENV = development並保存。 – stonyau

2

也可以設置它通過代碼,例如:

process.env.NODE_ENV = 'test';

+33

我強烈建議任何人不要更改應用程序邏輯中的環境標識符。你永遠不希望應用程序突然想到這是別的東西,而不是真的。這應該只能在系統級別上進行更改,正如許多其他答案所表明的那樣。 – Kafoso

+2

您可能需要閱讀12個因子應用程序:https://12factor.net/config。此代碼將違反此規定。有充分的理由讓你的配置與你的代碼分開。 – jcollum

+0

有趣的12個因子的應用程序!保持! – joaquindev

5

在UBUNTU使用:

$出口NODE_ENV =測試

+0

像一個魅力工作,謝謝! –

37

對於使用* nix中(Linux和OS X等),沒有理由通過第二export命令去做的人,你可以鏈接它作爲調用命令的一部分:

NODE_ENV=development node server.js 

更容易,不是嗎? :)

+0

很好知道。 – basheps

+1

像cross-env這樣的軟件包也可以讓它在windows上工作。 – walkerrandophsmith

18

在Windows上使用節點時,我們遇到了此問題。

與其要求任何試圖運行應用程序的人設置這些變量,我們在應用程序中提供了回退。

var environment = process.env.NODE_ENV || 'development'; 

在生產環境中,我們會按照常規方法(SET/export)定義它。

28

提示

package.json

"scripts": { 
    "start": "set NODE_ENV=dev && node app.js" 
} 

app.js

console.log(process.env.NODE_ENV) // dev 
console.log(process.env.NODE_ENV === 'dev') // false 
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end) 

所以,這可以更好地:

"start": "set NODE_ENV=dev&& node app.js" 

console.log(process.env.NODE_ENV.trim() === 'dev') // true