Если я установлю переменные env, используя dotenv и PM2 ecosystem.config.js, какой из них будет использовать Node? - PullRequest
0 голосов
/ 25 июня 2019

Я предполагаю, что PM2 добавляет процессные переменные "родным" системным способом, что-то вроде:

MYVAR=hey; node app.js

Но проблема в том, что пакет dotenv npm работает внутри скрипта (послеPM2 уже добавил свои envs), например

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

Так какие из них будут иметь приоритет?

ecosystem.config.js

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

.env / dotenv

MYVAR=dotenv

Код

console.log(process.env.MYVAR)

1 Ответ

0 голосов
/ 25 июня 2019

dotenv.config() не будет перезаписывать переменные, если обнаружит, что они уже существуют в process.env (что им назначен путь PM2 MYVAR=foo; node app.js.

Таким образом, процесс envs, установленный до запуска, будет иметь приоритет.

Это на самом деле в README dotenv.

Что происходит с переменными среды, которые уже были установлены?

Мы никогда не будем изменять какие-либо переменные окружения, которые уже были установлены. В частности, если в вашем файле .env есть переменная, которая конфликтует с той, которая уже существует в вашей среде, то эта переменная будет пропущена. Это поведение позволяет вам переопределить все конфигурации .env с машинной средой, хотя это не рекомендуется.

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

Если вам нужно как-то изменить это поведение, есть также пакет dotenv-override.

...