Чтение переменных среды в Node.js

Ответы:

1879
process.env.ENV_VARIABLE

Где ENV_VARIABLEимя переменной, к которой вы хотите получить доступ.

См. Документацию Node.js дляprocess.env .

Jayesh
источник
4
Обратите внимание, что это не будет видно вне процесса узла и его подпроцессов. Например, он не будет виден, если вы запустите envв другом окне оболочки во время работы процесса узла или в той же оболочке после выхода из процесса узла.
Марко Боначи
17
это также работает для назначения переменных. process.env.FOO = "foo";работает.
цыплята
16
Стоит отметить, что это не работает в приложении React. process.envдезинфицируется по соображениям безопасности. REACT_ENV_Доступны только переменные, которые начинаются с . Смотрите: github.com/facebookincubator/create-react-app/blob/master/…
Марк Эдингтон
7
@MarkEdington Я думаю, что это должно бытьREACT_APP_
г-н 14
5
@ Mr.14 Правильно! Это REACT_APP_, а не REACT_ENV_
Марк Эдингтон
133

Используя Node.js , вы можете получить переменные окружения по ключу из process.envобъекта:

например

var mode   = process.env.NODE_ENV;
var apiKey = process.env.apiKey; // '42348901293989849243'

Вот ответ, который объяснит настройку переменных среды в node.js

Subodh Ghulaxe
источник
какая библиотека требуется для использования вышеуказанного метода process.env?
user_mda
3
@user_mda process.envвстроен в API node.js.
Джейсон Аксельсон
Я просто устанавливаю все, что я хочу на process.env? почему люди устанавливают его там, а не объект конфигурации, который требует () ', редактируемый node.js?
PDN
3
process.env предоставляет доступ к переменной среды, установленной на уровне операционной системы. Они могут быть установлены различными способами и будут зависеть от того, где вы развертываете свое приложение. Например, я часто запускаю свое локальное приложение, используя NODE_ENV = development NODE_PATH = lib node server.js. Затем process.env.NODE_PATH вернет 'lib'
NectarSoft
57

Если вы хотите использовать строковый ключ, сгенерированный в вашей программе Node.js, скажем var v = 'HOME', вы можете использовать process.env[v].

В противном случае, process.env.VARNAMEэто должно быть жестко закодировано в вашей программе.

user2574650
источник
Почему у тебя process.env['HOME']?
AlgoRythm
35

Чтобы получить переменные среды в Node.JS, вы можете использовать process.env.VARIABLE_NAME , но не забывайте, что назначение свойства для process.env неявно преобразует значение в строку.

Избегайте логической логики

Даже если ваш файл .env определяет переменную, такую ​​как SHOULD_SEND = false или SHOULD_SEND = 0 , значения будут преобразованы в строки ( «false» и «0» соответственно) и не будут интерпретироваться как логические значения.

if (process.env.SHOULD_SEND) {
 mailer.send();
} else {
  console.log("this won't be reached with values like false and 0");
}

Вместо этого вы должны сделать явные проверки. Я обнаружил, что в зависимости от среды имя имеет большое значение.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
Игорь Литвинович
источник
1
Мне нравится использовать 'yes' и 'no' для логических переменных env, которые должны быть явно проверены. Это позволяет избежать проблем во многих языках программирования.
Dogweather
22

Вы можете использовать пакет env для управления переменными среды для каждого проекта:

  • Создайте .envфайл в каталоге проекта и поместите туда все свои переменные.
  • Добавьте эту строку в верхней части вашего файла ввода приложения:
    require('dotenv').config();

Выполнено. Теперь вы можете получить доступ к переменным окружения с помощью process.env.ENV_NAME.

Хуй во
источник
9
Пакет dotenv полезен, но ответ на заданный вопрос читается как process.env.ENV_VARIABLE. Пакет dovenv предназначен для загрузки настроек из файла в среду.
Роберт Паттерсон
Это моя точка зрения: управлять и загружать переменные env из envбиблиотеки.
Хай Во
1
Вы можете сделать то же самое не специфичным для node.js способом с помощью envdirутилиты.
Крис Джонсон
Аналогично github.com/bitrise-io/envman, который также не является nodeспецифичным.
MarkHu
1
вы сделали мой день! Большое спасибо!
Ваха
0

Почему бы не использовать их в каталоге Users в .bash_profileфайле, чтобы вам не приходилось отправлять файлы с вашими переменными в производство?

Брэд Вандербуш
источник