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


Ответы:


1879
process.env.ENV_VARIABLE

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

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


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


какая библиотека требуется для использования вышеуказанного метода 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это должно быть жестко закодировано в вашей программе.


Почему у тебя 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файле, чтобы вам не приходилось отправлять файлы с вашими переменными в производство?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.