NODE_ENV
是使用Node.js常去設定的環境變數,不過它其實並不是Node.js本身會去使用到的環境變數,而是這個生態系約定俗成的用法。在Linux、macOS等Unix-like的作業系統環境下,要設定程式的環境變數的值,只要在執行指令的前面加上變數=值
並用空格隔開即可,但在如Windows等其它作業系統,指令就不支援這樣的語法。
例如我們要執行Node.js的應用程式,通常會透過npm
的npm start
指令來執行。在生產環境下(production),經常將指令寫成NODE_ENV=production npm start
,來設定行程(process)的NODE_ENV
環境變數的值為production
;在開發環境下(development)下,則是經常將指令寫成NODE_ENV=development npm run ...
;同樣地,在跑測試的時候,則是經常將指令寫成NODE_ENV=test npm test
。不過每次下指令都要去設定NODE_ENV
環境變數實屬麻煩了點,所以package.json
檔案可能會寫成像是以下這樣:
{
...
"scripts": {
"start": "NODE_ENV=production node ...",
"start:dev": "NODE_ENV=development node ...",
"test": "NODE_ENV=test mocha ...",
},
...
}
不過寫成上面這樣的package.json
檔案到Windows作業系統中使用就會出問題了。如下圖:
這是因為在Windows上,若要在指令中設定環境變數,要使用set
指令來協助完成。像是以下這樣:
但是寫成以上這樣,反而會變成Unix-like的作業系統會有問題。如下圖:
實際上,這個問題有個流行的解法是使用cross-env
這個套件,不過這個套件並不是專為設定NODE_ENV
環境變數而設計。它基於cross-spawn
套件,把指令的所有引數包含環境變數的設定都去做跨平台處理。如果只是拿來設定NODE_ENV
環境變數,就有點大材小用的感覺,實在沒必要加了一堆程式碼只為了要設定NODE_ENV
環境變數。此外,這兩個套件的作者(不同作者)都已經不更新了,還是少用為妙。
Run with NODE_ENV
「Run with NODE_ENV」是筆者開發的套件,可以用來在任意平台上設定NODE_ENV
環境變數。
npmjs.com
npm 安裝指令
使用方法
用法非常簡單,就像以下這樣:
run-with-node-env production npm start # NODE_ENV=production npm start
run-with-node-env development npm run start:dev # NODE_ENV=development npm run start:dev
以上面的package.json
檔案作為例子,在使用npm i run-with-node-env
安裝套件後,將package.json
檔案改寫成這樣:
{
...
"scripts": {
"start": "run-with-node-env production node ...",
"start:dev": "run-with-node-env development node ...",
"test": "run-with-node-env test mocha ...",
},
...
}