动态

详情 返回 返回

node 項目讀取環境變量 - 动态 详情

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

安裝 dotenvnpm install dotenv --save

dotenv 會自動讀取項目根目錄下的 .envprocess.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 # 關閉 👆 這種模式

關聯

  1. Node Environment Variables: Process env Node

Add a new 评论

Some HTML is okay.