如果我使用dotenv和PM2生态系统.config.js设置环境变量,那么Node将使用哪一个?

时间:2019-06-25 19:30:06

标签: javascript node.js pm2 dotenv

我假设PM2以“本机”系统方式追加流程变量,例如:

MYVAR=hey; node app.js

但是问题是dotenv npm软件包可以在脚本内运行(在PM2已经附加了envs之后),例如

dotenv.config() //reads .env file and appends at runtime

那么哪个var将优先?

ecosystem.config.js

{
  //...standard pm2 config here, skipping
  env: {
     MYVAR: 'ecosystem',
   },
}

.env / dotenv

MYVAR=dotenv

代码

console.log(process.env.MYVAR)

1 个答案:

答案 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软件包。