gpt4 book ai didi

javascript - 如果我使用 dotenv 和 PM2 ecosystem.config.js 设置环境变量,Node 将使用哪一个?

转载 作者:行者123 更新时间:2023-11-30 19:27:23 27 4
gpt4 key购买 nike

我假设 PM2 在启动时以“ native ”系统方式附加环境变量,例如:

 MYVAR=hey; node app.js

dotenv npm 包的不同之处在于它必须以另一种方式附加变量,因为它在脚本内部工作(它不能做 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 文件。哪个变量将在 process.env 中?

生态系统.config.js

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

.env/dotenv

MYVAR=dotenv

代码

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

最佳答案

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

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

这个其实在dotenv的README里面。

What happens to environment variables that were already set?

We will never modify any environment variables that have already been set. In particular, if there is a variable in your .env file which collides with one that already exists in your environment, then that variable will be skipped. This behavior allows you to override all .env configurations with a machine-specific environment, although it is not recommended.

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

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

关于javascript - 如果我使用 dotenv 和 PM2 ecosystem.config.js 设置环境变量,Node 将使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com