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 已配置');
} 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

原生--env-file中,已存在的进程环境优先于文件;多个文件的覆盖关系应按版本确认。老版本用 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. 给非敏感配置默认值:先在变量缺失时取默认值,再校验数字格式与业务允许范围(通常1–65535;需要自动分配端口时可允许0);不要用 Number(...) || 3000 静默吞掉无效输入或0
  2. 类型转换:环境变量全是字符串,'false' 是真值!布尔判断写 process.env.DEBUG === 'true';
  3. 密钥优先用密钥管理服务(KMS/Vault/云厂商 Secret Manager),环境变量是兜底方案。

常见问题(FAQ)

Q:修改 .env 后要重启吗?
要。环境变量在进程启动时读入,运行中改文件不会生效(dotenv 本身不监视文件或重启进程;nodemon等需明确配置监视.env)。

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

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

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台