Узел process.env.VARIABLE_NAME, возвращающий неопределенные
Я использую переменные среды на своем mac для хранения некоторых конфиденциальных учетных данных и пытается получить к ним доступ через Node. Я добавил их в свой профиль среды с помощью
export VARIABLE_NAME=mySensitiveInfo
Когда я использую echo $VARIABLE_NAME
я получаю правильный вывод (моя конфиденциальная информация).
Однако, когда я пытаюсь получить доступ к этой же переменной в узле с помощью process.env.VARIABLE_NAME
и попытаться распечатать его на консоли, я получаю неопределенный.
Тем не менее, другие переменные среды выглядят нормально. Например, когда я console.log(process.env.FACEBOOK_CALLBACK_URL)
, он выводит правильное значение на мою консоль. Несколько дней назад я добавил FACEBOOK_CALLBACK_URL.
Должен ли я перезапустить свою машину или что-то еще? Требуется ли определенное время, прежде чем переменные среды станут доступными в узле? Самый близкий ответ, который я видел на SO, - это сообщение, но никто не мог понять, почему это происходит.
Ответы
Ответ 1
process.env.VARIABLE_NAME
возвращает undefined
поскольку среда выполнения Node.js еще не знает недавно добавленного VARIABLE_NAME
. Чтобы устранить проблему, необходимо перезапустить среду выполнения Node.js (например, IDE).
Для воспроизведения этой проблемы можно использовать следующие шаги:
- Откройте IDE, такую как WebStorm, и напишите простую программу Node.js:
console.log(process.env.VARIABLE_NAME)
. Он будет печатать undefined
как ожидалось, поскольку VARIABLE_NAME
еще не определен. Держите IDE включенным, не закрывайте его. - Открыть профиль среды, например
.bash_profile
и добавить в него export VARIABLE_NAME=mySensitiveInfo
. - Откройте системную консоль и запустите
source.bash_profile
, чтобы выполнялась вышеуказанная инструкция export
. С этого момента всякий раз, когда открывается системная консоль, существует переменная среды VARIABLE_NAME
. - В системной консоли выполните команду Node.js на шаге 1, она будет печатать
mySensitiveInfo
. - Переключитесь на IDE и выполните Node.js-программу, она будет печатать
undefined
. - Перезагрузите IDE и выполните программу Node.js, на этот раз распечатает
mySensitiveInfo
Ответ 2
У меня проблема только сейчас, и я использую это, решив ее в конфигурации webpack
const plugins = [
new webpack.NoEmitOnErrorsPlugin(),
// after compile global will defined 'process.env' this Object
new webpack.DefinePlugin({
BUILD_AT : Date.now().toString(32),
DEBUG: process.env.NODE_ENV !== 'production',
'process.env': {
'NODE_ENV': JSON.stringify(process.env.NODE_ENV || "development"),
'VARIABLE_NAME': JSON.stringify(process.env.VARIABLE_NAME)
}
})
]