Node.js启动服务后如何查看process.env环境变量
服务运行状态下查看process.env的几种方法
不需要停掉正在运行的服务,按场景选下面任意一种方法即可:
- 加开发专用调试路由(适合Web类服务)
如果你的服务是HTTP服务,直接在入口文件加一段仅非生产环境生效的调试路由,启动后直接请求对应地址就能拿到全量环境变量,以Express框架为例:
服务启动后访问// 生产环境不加载这段逻辑,避免敏感信息泄露 if (process.env.NODE_ENV !== 'production') { app.get('/__debug/get-env', (req, res) => res.json(process.env)) }http://localhost:你的服务端口/__debug/get-env就能看到所有变量,不用操作运行服务的控制台。 - 监听系统信号触发现有控制台打印(不用额外开端口)
在服务入口文件加一段信号监听逻辑,SIGUSR1是系统预留的自定义信号,触发后不会终止服务运行:
服务启动后,新开一个终端窗口执行process.on('SIGUSR1', () => { console.log('=== 当前进程环境变量列表 ===') console.log(process.env) console.log('=== 当前NODE_ENV ===', process.env.NODE_ENV) })ps aux | grep node找到你正在运行的node服务对应的PID(进程ID),再执行kill -SIGUSR1 替换成你查到的PID,原来跑服务的控制台就会直接打印出所有环境变量,服务本身不会中断。 - 系统层面直接读取进程环境变量(不用改任何代码)
不管你有没有加上面的逻辑,操作系统会存下每个运行进程的环境变量:- macOS/Linux系统:查到PID后执行
cat /proc/你的PID/environ | tr '\0' '\n',终端会直接输出该进程的所有环境变量 - Windows系统:查到PID后执行
wmic process where "processid=你的PID" get CommandLine,EnvironmentVariables即可查看
- macOS/Linux系统:查到PID后执行
快速确认当前生效的NODE_ENV配置
- 最稳妥的方式是在服务入口文件最顶部加一行启动日志,每次服务启动第一时间就会打印当前环境,不会出现判断偏差:
console.log(`服务启动,当前运行环境:${process.env.NODE_ENV ?? '未显式设置,默认走development逻辑'}`) - 如果你平时需要频繁切换环境,建议在package.json里把不同环境的启动脚本写死,配合
cross-env规避Windows/macOS/Linux设置环境变量的语法差异,避免手动输命令写错NODE_ENV值:{ "scripts": { "dev": "cross-env NODE_ENV=development node app.js", "staging": "cross-env NODE_ENV=staging node app.js", "start": "cross-env NODE_ENV=production node app.js" } } - 注意不要在业务代码运行过程中随意修改
process.env的属性,否则会出现启动时打印的环境和实际运行逻辑不一致的问题,所有环境变量赋值都要放在服务启动执行前完成。
安全提示:process.env里通常包含数据库密码、API密钥等敏感配置,所有调试用的环境变量查询逻辑一定要加环境判断,严禁在生产环境对外暴露。
内容的提问来源于stack exchange,提问作者Heisenberg
相关产品推荐
相关产品推荐

