Читайте змінні середовища в 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


яка lib потрібна для використання вищевказаного методу process.env?
user_mda

3
@user_mda process.envвбудований в api node.js.
Джейсон Аксельсон

Чи потрібно просто встановити все, що я хочу на process.env? чому люди встановлюють його там, на відміну від, наприклад, об’єкта config, який вимагається () 'ed від 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
Мені подобається використовувати "так" і "ні" для булевих середовищ, які необхідно чітко перевірити. Це дозволяє уникнути проблем у багатьох мовах програмування.
Dogweather

22

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

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

Зроблено. Тепер ви можете отримати доступ до змінних вашого середовища за допомогою process.env.ENV_NAME.


9
Пакет dotenv є корисним, але на запитання відповідає відповідь процес читання.env.ENV_VARIABLE. Пакет dovenv - це все про завантаження налаштувань з файлу в середовище.
Роберт Паттерсон

Це моя суть: керувати та завантажувати env змінні з envбібліотеки.
Хуй Во

1
Ви можете зробити те ж саме, що не для node.js, використовуючи envdirутиліту.
Кріс Джонсон

Подібно до github.com/bitrise-io/envman, який також не є nodeспецифічним.
MarkHu

1
ти мене вразив! Дуже дякую!
Ваха

0

Чому б не використовувати їх у каталозі Користувачі у .bash_profileфайлі, тож вам не доведеться натискати на виробництво жодні файли зі своїми змінними?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.