Не могу прочитать переменную среды в моем приложении Node.js

Я нахожусь на Ubuntu 12.04, и я только изучаю переменные среды. Я пытаюсь прочитать пользовательскую переменную из моего приложения, но она всегда отображается как undefined. Вот код моего тестового приложения:

// app.js

console.log('Value: ' + process.env.NODE_ENV);

Если я выполню следующие команды, вы увидите, что переменная имеет значение:

$ NODE_ENV=production
$ echo $NODE_ENV
production

Я могу echo $NODE_ENV весь день, и он будет продолжать показывать мне "производство", но когда я выполняю process.env.NODE_ENV в моем приложении Node, он всегда отображает "undefined".

$ node app.js
Value: undefined

Вот странная часть, хотя, если я покажу другую переменную среды, которая, как я знаю, уже существует, скажем, process.env.PATH, то это сработает.

$ node app.js
Value: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Еще одна странность заключается в том, что printenv list команды printenv list не содержит моей пользовательской переменной NODE_ENV несмотря на тот факт, что echo $NODE_ENV показывает мне правильное значение. printenv NODE_ENV ничего не показывает, но printenv PATH показывает правильное значение так же, как когда я обращался к PATH в моем приложении узла.

Ответ 1

Вам нужно export переменные оболочки, чтобы сделать их доступными для процессов, которые вы выполняете в своей оболочке.

Сравните вывод этой команды:

FOO=bar; bash -c 'echo $FOO'

с выходом этого:

export FOO=bar; bash -c 'echo $FOO'

Ответ 2

Я нашел свой путь здесь из чего-то глупого.

Я только что добавил новые экспортированные переменные, но мой node процесс все еще не видел их. Затем я понял, что этого недостаточно, чтобы перезапустить процесс node - мне пришлось открыть новый терминал (например, bash instance)). Как только я это сделал, он работал нормально:)

Ответ 3

Возможно, вам захочется использовать библиотеку для управления конфигурацией приложения.

Например nconf помогает управлять конфигурацией через

  • командной строки argumets
  • переменные среды
  • файлы
  • и т.д..

И глядя на источник - хороший способ узнать https://github.com/flatiron/nconf

Ответ 4

Перезапустите ваш bash (источник ~/.bashrc). Это будет учитывать вашу системную среду.