我假设PM2以“本机”系统方式追加流程变量,例如:
MYVAR=hey; node app.js
但是问题是dotenv
npm软件包可以在脚本内运行(在PM2已经附加了envs之后),例如
dotenv.config() //reads .env file and appends at runtime
那么哪个var将优先?
{
//...standard pm2 config here, skipping
env: {
MYVAR: 'ecosystem',
},
}
MYVAR=dotenv
console.log(process.env.MYVAR)
答案 0 :(得分:0)
dotenv.config()
如果发现变量已经以process.env
存在(它们已经以PM2 MYVAR=foo; node app.js
的方式分配,则不会覆盖它们。
因此启动前设置的进程环境将优先。
这实际上是dotenv的自述文件。
已经设置的环境变量会发生什么?
我们将永远不会修改任何已设置的环境变量。特别是,如果您的.env文件中有一个变量与环境中已经存在的一个变量发生冲突,则该变量将被跳过。此行为使您可以在计算机特定的环境中覆盖所有.env配置,尽管不建议这样做。
https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set
如果您需要以某种方式更改此行为,则还有一个dotenv-override
软件包。