Узел 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).

Для воспроизведения этой проблемы можно использовать следующие шаги:

  1. Откройте IDE, такую как WebStorm, и напишите простую программу Node.js: console.log(process.env.VARIABLE_NAME). Он будет печатать undefined как ожидалось, поскольку VARIABLE_NAME еще не определен. Держите IDE включенным, не закрывайте его.
  2. Открыть профиль среды, например .bash_profile и добавить в него export VARIABLE_NAME=mySensitiveInfo.
  3. Откройте системную консоль и запустите source.bash_profile, чтобы выполнялась вышеуказанная инструкция export. С этого момента всякий раз, когда открывается системная консоль, существует переменная среды VARIABLE_NAME.
  4. В системной консоли выполните команду Node.js на шаге 1, она будет печатать mySensitiveInfo.
  5. Переключитесь на IDE и выполните Node.js-программу, она будет печатать undefined.
  6. Перезагрузите 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)
     }
   })
]