【问题标题】:If I set env vars using dotenv and PM2 ecosystem.config.js, which one will Node use?如果我使用 dotenv 和 PM2 生态系统.config.js 设置环境变量,Node 将使用哪一个?
【发布时间】:2019-11-07 16:37:06
【问题描述】:

我假设 PM2 在启动时以“本机”系统方式附加 env vars,例如:

 MYVAR=hey; node app.js

dotenv npm 包的不同之处在于它必须以另一种方式附加 vars,因为它在脚本内部工作(它不能做MYVAR=someothervar; node app.js,因为程序已经启动),所以它的工作方式如下:

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

现在说 PM2 启动 MYVAR=hey; node app.js,然后在 app.js 中运行 dotenv.config(),它读取包含 MYVAR=foo 的 .env 文件。哪个 var 将在 process.env 中?

生态系统.config.js

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

.env/dotenv

MYVAR=dotenv

代码

dotenv.config()
console.log(process.env.MYVAR)

【问题讨论】:

    标签: javascript node.js pm2 dotenv


    【解决方案1】:

    dotenv.config() 不会覆盖变量,如果它发现它们已经存在于 process.env 中(它们已被分配到 PM2 MYVAR=foo; node app.js 方式。

    因此在启动之前设置的进程环境将优先。

    这实际上是在 dotenv 的 README 中。

    已经设置的环境变量会怎样?

    我们永远不会修改任何已经设置好的环境变量。特别是,如果您的 .env 文件中有一个变量与您的环境中已经存在的变量发生冲突,那么该变量将被跳过。此行为允许您使用特定于机器的环境覆盖所有 .env 配置,但不建议这样做。

    https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set

    如果您绝对需要覆盖现有的环境变量 - 使用 dotenv-override 包。

    【讨论】:

      猜你喜欢
      • 2020-01-28
      • 2019-08-24
      • 2020-09-18
      • 2020-10-26
      • 2020-07-12
      • 1970-01-01
      • 2017-07-02
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多