Ответ 1
Вам нужно export
переменные оболочки, чтобы сделать их доступными для процессов, которые вы выполняете в своей оболочке.
Сравните вывод этой команды:
FOO=bar; bash -c 'echo $FOO'
с выходом этого:
export FOO=bar; bash -c 'echo $FOO'
Я нахожусь на 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
в моем приложении узла.
Вам нужно export
переменные оболочки, чтобы сделать их доступными для процессов, которые вы выполняете в своей оболочке.
Сравните вывод этой команды:
FOO=bar; bash -c 'echo $FOO'
с выходом этого:
export FOO=bar; bash -c 'echo $FOO'
Я нашел свой путь здесь из чего-то глупого.
Я только что добавил новые экспортированные переменные, но мой node процесс все еще не видел их. Затем я понял, что этого недостаточно, чтобы перезапустить процесс node - мне пришлось открыть новый терминал (например, bash instance)). Как только я это сделал, он работал нормально:)
Возможно, вам захочется использовать библиотеку для управления конфигурацией приложения.
Например nconf помогает управлять конфигурацией через
И глядя на источник - хороший способ узнать https://github.com/flatiron/nconf
Перезапустите ваш bash (источник ~/.bashrc). Это будет учитывать вашу системную среду.