Node.js 如何读取环境变量?

Node.js 读环境变量用 process.env.变量名,未设置时为 undefined。支持启动时传入、.env 文件(Node 20+ 原生 --env-file 或 dotenv 库)。本文给出完整用法与生产实践。

最佳实践
Node.js 事件循环与异步任务示意

通过 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,密钥进版本库是严重安全事故。

生产实践

  1. 启动时校验必需变量:缺失就快速失败,别带着 undefined 跑:
const required = ['API_KEY', 'DB_URL'];
for (const key of required) {
  if (!process.env[key]) {
    console.error(`缺少必需环境变量: ${key}`);
    process.exit(1);
  }
}
  1. 给非敏感配置默认值:const port = Number(process.env.PORT) || 3000;
  2. 类型转换:环境变量全是字符串,'false' 是真值!布尔判断写 process.env.DEBUG === 'true';
  3. 密钥优先用密钥管理服务(KMS/Vault/云厂商 Secret Manager),环境变量是兜底方案。

常见问题(FAQ)

Q:修改 .env 后要重启吗?
要。环境变量在进程启动时读入,运行中改文件不会生效(dotenv 和热重载工具如 nodemon 会重启进程来解决)。

Q:前端代码能用 process.env 吗?
浏览器里不存在 process.env。前端构建工具(Vite/Webpack)会在构建时把环境变量替换进代码——这意味着密钥绝不能放进前端环境变量。

Q:process.env 里的变量能枚举吗?
能,Object.keys(process.env) 列出全部(含系统变量,数量很多)。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台