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

1116

Есть ли способ прочитать переменные окружения в коде Node.js?

Например, Python os.environ['HOME'].

Теги:
environment-variables

7 ответов

1674
Лучший ответ
process.env.ENV_VARIABLE

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

Смотрите Node.js docs для process.env.

  • 3
    Обратите внимание, что это не будет видно вне процесса узла и его подпроцессов. Например, он не будет виден, если вы запустите env в другом окне оболочки во время работы процесса узла или в той же оболочке после выхода из процесса узла.
  • 0
    Посмотрите здесь для большего контекста.
Показать ещё 6 комментариев
116

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

например

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

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

  • 0
    какая библиотека требуется для использования вышеуказанного метода process.env?
  • 2
    @user_mda process.env встроен в API-интерфейс node.js.
Показать ещё 2 комментария
49

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

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

9

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

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

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

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

Вместо этого вы должны сделать явные проверки. Ive, найденный в зависимости от названия среды, проходит долгий путь.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
9

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

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

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

  • 6
    Пакет dotenv полезен, но ответ на заданный вопрос читается как process.env.ENV_VARIABLE. Пакет dovenv предназначен для загрузки настроек из файла в среду.
  • 0
    Это моя точка зрения: управлять и загружать переменные env из библиотеки env .
Показать ещё 2 комментария
0

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

-2

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

Он дает вам кучу хороших параметров при чтении переменных среды, таких как:

  • фильтрует их префиксом или настраиваемой функцией фильтрации.
  • преобразование имен переменных среды в папку на верблюжьей, строчной или произвольной основе.
  • значения переменных среды синтаксиса для допустимых типов данных (int, float, bool и т.д.).

Надеюсь, вам понравится.

Вы можете проверить репозиторий для более подробной информации: https://github.com/yatki/read-env

Основной пример

Скажем, у вас есть переменные среды, начинающиеся с префикса "EXAMPLE_", как показано ниже:

EXAMPLE_OBJECT_KEY= '{"prop": "value"}',
EXAMPLE_ARRAY_KEY= '[1,2,3, "string", {"prop": "value"}, 5.2]',
EXAMPLE_TRUE_KEY= 'true',
EXAMPLE_FALSE_KEY= 'false',
EXAMPLE_INT_KEY= '5',
EXAMPLE_FLOAT_KEY= '5.2',
EXAMPLE_STRING_KEY= 'example',

ваш-app.js:

import readEnv from 'read-env';

const options = readEnv('EXAMPLE');
console.log(options);

Вывод:

{
  arrayKey: [ 1, 2, 3, 'string', { prop: 'value' }, 5.2 ],
  falseKey: false,
  floatKey: 5.2,
  intKey: 5,
  objectKey: { prop: 'value' },
  stringKey: 'example',
  trueKey: true
}

Чтение всех переменных среды, как есть:

const options = readEnv({
  transformKey: false,
  parse: false,
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню