Node.js 如何读取环境变量?
Node.js 读环境变量用 process.env.变量名,未设置时为 undefined。支持启动时传入、.env 文件(Node 20+ 原生 --env-file 或 dotenv 库)。本文给出完整用法与生产实践。
通过 process.env 对象读取,未设置时是 undefined:
const apiKey = process.env.API_KEY;
if (apiKey) {
console.log('API Key:', apiKey);
} else {
console.error('环境变量 API_KEY 未设置');
}
怎么设置环境变量
# Linux/macOS:导出到当前 shell
export API_KEY=your_api_key
node app.js
# 或一行内联(仅这条命令生效)
API_KEY=your_api_key node app.js
# Windows PowerShell
$env:API_KEY="your_api_key"
node app.js
.env 文件(开发标配)
项目根目录建 .env:
API_KEY=your_api_key
DB_URL=postgres://localhost:5432/mydb
Node 20.6+ 原生支持:
node --env-file=.env app.js
老版本用 dotenv 库(npm install dotenv,入口首行 require('dotenv').config())。
安全红线:.env 必须加进 .gitignore,密钥进版本库是严重安全事故。
生产实践
- 启动时校验必需变量:缺失就快速失败,别带着 undefined 跑:
const required = ['API_KEY', 'DB_URL'];
for (const key of required) {
if (!process.env[key]) {
console.error(`缺少必需环境变量: ${key}`);
process.exit(1);
}
}
- 给非敏感配置默认值:
const port = Number(process.env.PORT) || 3000; - 类型转换:环境变量全是字符串,
'false'是真值!布尔判断写process.env.DEBUG === 'true'; - 密钥优先用密钥管理服务(KMS/Vault/云厂商 Secret Manager),环境变量是兜底方案。
常见问题(FAQ)
Q:修改 .env 后要重启吗?
要。环境变量在进程启动时读入,运行中改文件不会生效(dotenv 和热重载工具如 nodemon 会重启进程来解决)。
Q:前端代码能用 process.env 吗?
浏览器里不存在 process.env。前端构建工具(Vite/Webpack)会在构建时把环境变量替换进代码——这意味着密钥绝不能放进前端环境变量。
Q:process.env 里的变量能枚举吗?
能,Object.keys(process.env) 列出全部(含系统变量,数量很多)。