Если я установлю переменные env с помощью dotenv и PM2 coecity.config.js, какой из них будет использовать Node?

Я предполагаю, что PM2 добавляет env vars «родным» системным способом при запуске, что-то вроде:

 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(), который читает файл .env, содержащий MYVAR=foo. Какой var будет в process.env?

экосистема.config.js

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

.env / dotenv

MYVAR=dotenv

Код

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

person 3nuc    schedule 25.06.2019    source источник


Ответы (1)


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

Если вам абсолютно необходимо переопределить существующие переменные env - используйте пакет dotenv-override.

person 3nuc    schedule 25.06.2019