跳至主要内容

[Node] 環境變數設置 NODE_ENV (environment variable)

keywords: 環境變數, env, process.env, cross-env, dotenv

Environment variables in Node.js. The Right way! @ DEV

使用 node 指令時

使用 node 指令執行程式時:

$ export NODE_ENV=development && node index.js  # Mac,寫法一
$ NODE_ENV=development node index.js # Mac,寫法二

$ set NODE_ENV=development && node index.js # Windows

在該 index.js 中即可使用 process.env.NODE_ENV 取得該變數的值:

process.env.NODE_ENV;

process.env.NODE_ENV 在哪儿设置 @ CNode.js

使用 npm 指令時

使用 npm 指令時,可以直接在 package.jsonscripts 屬性內設定:

{
"scripts": {
"dev": "NODE_ENV=foo && node index.js"
}
}

一樣可以在 index.js 中透過 process.env.NODE_ENV 取得該變數的值。

cross-env

但若該專案會跨作業系統(即,windows)使用,建議搭配套件 cross-env 使用,只需要 package.json 中執行程式的指令前加上 cross-env

{
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
}
}

cross-env @ npm

dotenv

dotenv @ npm

透過 dotenv 可以取得專案根目錄底下的 .env 檔案:

// .env
ID=xxxxxxxx
SECRET=xxxxxxxx

使用時只需要在檔案中呼叫 require('dotenv').config() 即可取得 process.env 的內容:

// 在根目錄底下新增 .env 檔

// 載入 dotenv
require('dotenv').config();

// 使用環境變數
process.env.SECRET;
process.env.ID;

或者也可以在 package.json 的 script 去執行:

{
// ...
"scripts": {
"start": "node bin/www.js",
"dev": "node -r dotenv/config bin/www.js"
// For nodemon users ====
// "dev": "nodemon -r dotenv/config bin/www.js"
}
// ...
}

TypeScript

:::參考資料

How To Strongly Type process.env @ TotalTypeScript

:::

// global.d.ts
declare global {
namespace NodeJS {
interface ProcessEnv {
MY_ENV_VARIABLE: string;
}
}
}

export {};