node 項目從 process.env 讀取環境變量時,process.env 有哪些來源?
命令行
使用 cross-env 處理跨平台環境變量設置。
{
"scripts": {
"dev": "cross-env MY_ENV=hello node ./index.js",
"start": "cross-env MY_ENV=hello webpack"
}
}
在 mac 下可以直接設置局部變量,{ "dev": "MY_ENV=hello node ./index.js" }。
.env 文件
環境變量配置在項目根目錄下的 .env。
PORT=8080
MY_ENV=live
安裝 dotenv,npm install dotenv --save。
dotenv 會自動讀取項目根目錄下的 .env 到 process.env,並且不會覆蓋已存在 process.env 上的環境變量。
require('dotenv').config();
const http = require('http');
const port = parseInt(process.env.PORT, 10) || 5000;
http
.createServer((request, response) => {
response.writeHead(200, {
'Content-Type': 'text/plain',
});
response.write(process.env.MY_ENV);
response.end();
})
.listen(port);
按照 dotenv 的最佳實踐:
- 應該把
.env加到.gitignore,因為每個環境的配置不同,還可能包含數據庫密鑰等; - 不要按部署環境劃分
.env.test、.env.staging等環境變量文件,因為難以擴展,更多部署環境就需要添加更多的配置文件。
shell
如果在執行 node 腳本前,還需為其他的 shell 腳本設置環境變量。
set -o allexport # 👉 把後面創建的變量標記為導出,即導出為環境變量
. ./.env
set +o allexport # 關閉 👆 這種模式
關聯
- Node Environment Variables: Process env Node