无法在apply-platform的node_modules子模块node-client中访问process.env变量
PM2 环境变量问题解决方案
1. node-client模块访问process.env的正确方式
Node.js 中process.env是进程级全局对象,同一进程下所有依赖模块共享该对象,node-client作为apply-platform的依赖模块,直接通过process.env.变量名访问即可,不需要额外的读取配置操作。
注意:process.env的所有属性值会被强制转为字符串类型,若要存储对象需先手动执行JSON序列化,读取时再反序列化。
2. process.env.env输出[object Object]的原因与修复
该问题是你的PM2 ecosystem.config.js配置写法错误导致:
- PM2要求ecosystem.config.js中的
env字段必须是扁平的字符串键值对,不允许嵌套对象。你当前把env字段又嵌套了一层env对象,PM2加载时会自动调用对象的toString()方法,最终就变成了[object Object]字符串,自然无法通过JSON.stringify解析。 - 修复示例:
// 错误写法(嵌套了env对象) module.exports = { apps: [ { name: "www", script: "./server.js", env: { // 错误:嵌套对象 env: { NODE_ENV: "test", REGION: "USEastTest" } } } ] }
// 正确写法(扁平结构) module.exports = { apps: [ { name: "www", script: "./server.js", // 所有环境变量直接写在env下,不要嵌套 env: { NODE_ENV: "test", REGION: "USEastTest", // 新增的变量直接在这里添加即可 YOUR_NEW_VAR1: "value1", YOUR_NEW_VAR2: "value2" } } ] }
3. 新增环境变量不生效的解决
修改完配置文件后必须按以下操作更新PM2进程的环境变量,否则PM2会复用旧的环境变量缓存:
- 执行重载命令,必须加
--update-env参数才会加载新的环境变量:pm2 reload ecosystem.config.js --update-env - 若重载仍不生效,可删除旧进程后重新启动:
pm2 delete <你的进程ID或名称> && pm2 start ecosystem.config.js - 验证是否生效:执行
pm2 env <进程ID>即可查看该进程当前加载的所有环境变量。
内容的提问来源于stack exchange,提问作者art
相关产品推荐
相关产品推荐

