Узел.js: установка переменных окружения



Я пытаюсь следовать учебнику, и он говорит:



"есть несколько способов, чтобы загрузить данные.




  1. загрузить из переменных окружения,

  2. загружено из файла JSON на диске,


ключи должны быть следующими:



USER_ID, USER_KEY


...Это означает, что при правильной настройке переменных среды управление учетными данными в приложении вообще не требуется."



на основе некоторых Googling, он появляется что мне нужно установить переменные в process.env? Как и где я могу установить эти учетные данные? Пример Пожалуйста.

949   14  

14 ответов:

переменные среды (в данном случае) используются для передачи учетных данных для вашего приложения. USER_ID и USER_KEY можно получить из process.env.USER_ID и process.env.USER_KEY соответственно. Вам не нужно редактировать их, просто получить доступ к их содержимому.

похоже, что они просто дают вам выбор между загрузкой вашего USER_ID и USER_KEY либо process.env или какой-то определенный файл на диске.

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

USER_ID=239482 USER_KEY=foobar node app.js

это передаст идентификатор пользователя 239482 и ключ пользователя в формате foobar. Это подходит для тестирования, однако для производства вы, вероятно, будете настраивать некоторые сценарии bash для экспорта переменных.

я настоятельно рекомендую заглянуть в пакет dotenv.

https://github.com/motdotla/dotenv

Это похоже на библиотеку, предложенную в ответе от @Benxamin, но она намного чище и не требует никаких сценариев bash. Также стоит отметить, что кодовая база пользуется популярностью и ухожена.

в основном вам нужно .env файл (который я настоятельно рекомендую игнорировать из вашего git / mercurial / etc):

FOO=bar
BAZ=bob

затем в файле ввода приложения поместите следующую строку как можно раньше:

require('dotenv').config();

- бум. Сделанный. - процесс.env ' теперь будет содержать переменные выше:

console.log(process.env.FOO);
// bar

The'.файл env ' не требуется, поэтому вам не нужно беспокоиться о том, что ваше приложение упадет в его отсутствие.

просто укажите значения env в командной строке

USER_ID='abc' USER_KEY='def' node app.js

если вы хотите вариант управления, попробовать envs npm пакет. Он возвращает значения среды, если они установлены. В противном случае можно указать значение по умолчанию, которое хранится в глобальном по умолчанию объектная переменная, если она не находится в вашей среде.

используя .env ("dot ee-en-vee") или файлы среды хороши по многим причинам. Люди могут управлять своими собственными конфигурациями. Вы можете развернуть различные среды (dev, stage, prod) в облаке службы с собственными настройками среды. И вы можете установить разумные значения по умолчанию.

внутри .env файл каждая строка является записью, как в этом примере:

NODE_ENV=development
API_URL=http://api.domain.com
TRANSLATION_API_URL=/translations/
GA_UA=987654321-0
NEW_RELIC_KEY=hi-mom
SOME_TOKEN=asdfasdfasdf
SOME_OTHER_TOKEN=zxcvzxcvzxcv

вы должны не включить .env в вашем репозитории управления версиями (добавьте его в свой .gitignore file).

чтобы получить переменные из .env файл в вашей среде, вы можете использовать сценарий bash, чтобы сделать эквивалент export NODE_ENV=development прямо перед началом приложение.

#!/bin/bash
while read line; do export "$line";
done <source .env

тогда это идет в вашем приложении javascript:

var envs = require('envs');

// If NODE_ENV is not set, 
// then this application will assume it's prod by default.
app.set('environment', envs('NODE_ENV', 'production')); 

// Usage examples:
app.set('ga_account', envs('GA_UA'));
app.set('nr_browser_key', envs('NEW_RELIC_BROWSER_KEY'));
app.set('other', envs('SOME_OTHER_TOKEN));

вы можете установить переменную среды через глобальную переменную процесса следующим образом:

process.env['NODE_ENV'] = 'production';

работает на всех платформах.

Это зависит от вашей операционной системы и оболочки

в linux с оболочкой bash, вы создаете переменные среды, как это (в консоли):

export FOO=bar

для получения дополнительной информации о переменных среды на ubuntu (например):

переменные среды на ubuntu

для пользователей windows этот вопрос переполнения стека и верхний ответ весьма полезны о том, как установить переменные среды через командную строку

как я могу установить NODE_ENV=производство в Windows?

наткнулся на хороший инструмент для этого.

node-env-file

анализирует и загружает файлы среды (содержащие экспорт переменных ENV) в узел.среда js, т. е. process.env - использует такой стиль:

.env

# some env variables

FOO=foo1
BAR=bar1
BAZ=1
QUX=
# QUUX=

Шаг 1: добавьте переменные среды в соответствующий файл. Например, ваша промежуточная среда может называться .env.staging, который содержит переменные среды USER_ID и USER_KEY, специфичный для вашей промежуточной среды.

Шаг 2: в своем package.json файл, добавьте следующее:

"scripts": {
  "build": "sh -ac '. ./.env.${REACT_APP_ENV}; react-scripts build'",
  "build:staging": "REACT_APP_ENV=staging npm run build",
  "build:production": "REACT_APP_ENV=production npm run build",
  ...
}

затем вызовите его в своем сценарии развертывания следующим образом:

npm run build:staging

супер простая установка и работает как a обаяние!

источник: https://medium.com/@tacomanator/environments-with-create-react-app-7b645312c09d

важно для Windows: существует несколько способов установки переменных среды. Но большинство из них не являются постоянными, они являются временными для текущей оболочки. (например SET SWEDISH_CHEF="bork bork" или $env:SWEDISH_CHEF = "bork bork")

чтобы он сохранялся, используйте эту команду PowerShell : [Environment]::SetEnvironmentVariable("SWEDISH_CHEF", "bork bork", "User") Примечание: 3-й аргумент "User" задает уровень (также может быть "Process" или "Machine" но из того, что я нашел "User" на самом деле используется для process.env)

чтобы убедиться, что он сохранился: запустите новый терминал, беги node и вводим process.env.SWEDISH_CHEF в оболочке узла для печати значения.

edit: env var, похоже, не сохраняется после перезагрузки. так что я закончил тем, что установил его через GUI под моим компьютером, чтобы он сохранялся навсегда

edit2: более простой вариант, конечно, просто создать .env файл в папке проекта. SWEDISH_CHEF="bork bork"

как расширение ответа @ctrlplusb,
Я бы предложил вам также взглянуть на env-dot-prop пакета.

это позволяет установить/получить свойства от process.env С помощью dot-path.

предположим, что ваш process.env содержит следующее:

process.env = {
  FOO_BAR: 'baz'
  'FOO_': '42'
}

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

const envDotProp = require('env-dot-prop');

console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42'}

envDotProp.get('foo');
//=> {bar: 'baz', '': '42'}

envDotProp.get('foo.');
//=> '42'

envDotProp.get('foo.', {parse: true});
//=> 42

envDotProp.set('baz.foo', 'bar');
envDotProp.get('', {parse: true});
//=> {foo: {bar: 'baz', '': 42}, baz: {foo: 'bar'}}

console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42', BAZ_FOO: 'bar'}

envDotProp.delete('foo');
envDotProp.get('');
//=> {baz: {foo: 'bar'}}

console.log(process.env);
//=> {BAZ_FOO: 'bar'}

это поможет вам проанализировать переменные среды и использовать их в качестве объект конфигурации в вашем приложении.
Это также поможет вам реализовать 12-коэффициент конфигурации.

очень хороший способ сделать переменные среды, которые я успешно использовал ниже:

А. есть разные конфигурационные файлы:

  1. dev.js // это имеет все переменные среды только для разработки
    Файл содержит:

    module.exports = {
     ENV: 'dev',
     someEnvKey1 : 'some DEV Value1',
     someEnvKey2 : 'some DEV Value2'
    };
    
  2. этап.js / / это имеет все переменные среды только для разработки

    ..
    
  3. qa.js // это все переменные среды для тестирования только
    Файл содержит:

    module.exports = {
     ENV: 'dev',
     someEnvKey1 : 'some QA Value1',
     someEnvKey2 : 'some QA Value2'
    };
    

Примечание: значения меняются с окружающей средой, в основном, но ключи остаются такими же.

  1. вы можете иметь больше

  2. z_ _ prod.Яш // все переменные среды для производства/жить только
    Примечание: этот файл никогда не поставляется в комплекте для развертывания

  3. поставить все эти конфигурационные файлы в/ config / folder

    <projectRoot>/config/dev.js
    <projectRoot>/config/qa.js
    <projectRoot>/config/z__prod.js
    <projectRoot>/setenv.js
    <projectRoot>/setenv.bat
    <projectRoot>/setenv.sh
    

Примечание: название prod отличается от других, так как оно не будет использоваться всеми.

Б. установите переменные среды OS/ Lambda/ AzureFunction/ GoogleCloudFunction из файла конфигурации

теперь в идеале эти переменные конфигурации в файле должны идти как переменные среды ОС (или, лямбда-переменные функции, или, переменные функции Azure, функции Google Cloud, так далее.)

Итак, мы пишем автоматизация в ОС Windows (или другой)

  1. предположим, что мы пишем'setenv' bat-файл, который принимает один аргумент, который является средой, которую мы хотим установить

  2. Теперь запустите " setenv dev"

a) это принимает входные данные от переданной переменной аргумента ('dev' на данный момент)
b) прочитайте соответствующий файл ('config\dev.js')
с) устанавливает переменные среды в ОС Windows (или другие)

например,

в setenv.содержание bat может быть:

    node setenv.js

в setenv.содержание js может быть:

    // import "process.env.ENV".js file (dev.js example)
    // loop the imported file contents
    //     set the environment variables in Windows OS (or, Lambda, etc.)

вот и все среда готова к использованию.

когда вы делаете ' setenv qa', все переменные среды qa будут готовы к использованию из qa.js, и готов к использованию той же программой (которая всегда запрашивает процесс.ОКР.someEnvKey1, но значение он получает qa один).

надеюсь, что это поможет.

Я становился неопределенным после установки системы env var. Когда я помещаю APP_VERSION в Пользователь env var, то я могу отобразить значение из узла через процесс.ОКР.APP_VERSION

Как сказал ctrlplusb, я рекомендую вам использовать packege dotenv, но другой способ сделать это-создать файл js и потребовать его в первой строке вашего сервера приложений.

env.js:

process.env.VAR1="Some value"
process.env.VAR2="Another Value"

приложение.js:

require('env')
console.log(process.env.VAR1) // Some Value

Comments

    Ничего не найдено.