Установка переменных среды для узла для извлечения

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

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

  • Загружается из переменных среды,
  • Загружается из файла JSON на диске,

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

USER_ID, USER_KEY

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

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

Ответы

Ответ 1

Переменные среды (в данном случае) используются для передачи учетных данных вашему приложению. 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 для экспорта переменных.

Ответ 2

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

https://github.com/motdotla/dotenv

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

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

FOO=bar
BAZ=bob

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

require('dotenv').config();

Boom. Готово. "process.env" теперь будет содержать перечисленные выше переменные:

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

Если вы хотите вариант управления, попробуйте пакет 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).

Чтобы получить переменные из файла .env в вашу среду, вы можете использовать bash script, чтобы сделать эквивалент 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 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));

Ответ 6

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

В linux с оболочкой bash вы создаете переменные окружения следующим образом (в консоли):

export FOO=bar

Для получения дополнительной информации о переменных окружения в Ubuntu (например):

Переменные окружения в Ubuntu

Ответ 7

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

env.js:

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

app.js:

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

Ответ 8

Шаг 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

Супер простая настройка и работает как шарм!

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

Ответ 10

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

node-env-file

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

.env

# some env variables

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

Ответ 11

Windows-пользователи: обратите внимание! Эти команды рекомендуются для Unix, но в Windows они являются только временными. Они устанавливают переменную только для текущей оболочки, как только вы перезапустите компьютер или запустите новую терминальную оболочку, они исчезнут.

  • SET TEST="hello world"
  • $env:TEST = "hello world"

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

A).env файл в вашем проекте - это лучший метод, потому что это будет означать, что вы можете переместить ваш проект в другие системы без необходимости устанавливать переменные среды на этой системе, так как вы можете запустить свой код.

  1. Создайте файл .env в корневой папке вашего проекта с содержимым: TEST="hello world"

  2. Напишите некоторый код узла, который будет читать этот файл. Я предлагаю установить dotenv (npm install dotenv --save), а затем добавить require('dotenv').config(); во время установки кода вашего узла.

  3. Теперь ваш код узла сможет получить доступ к process.env.TEST

Env файлы хорошо хранят API-ключи и другие секреты, которые вы не хотите иметь в своей базе кода. Просто убедитесь, что добавили его в свой .gitignore.

Б) Используйте Powershell - это создаст переменную, которая будет доступна в других терминалах. Но будьте осторожны, переменная будет потеряна после перезагрузки компьютера.

[Environment]::SetEnvironmentVariable("TEST", "hello world", "User")

Этот метод широко рекомендуется на форумах Windows, но я не думаю, что люди знают, что переменная не сохраняется после перезапуска системы....

C) Используйте графический интерфейс Windows - это не так круто, как команда, но, по крайней мере, оно работает и создает постоянную переменную.

  1. Найдите "Переменные среды" в меню "Пуск" или в панели управления.
  2. Выберите "Изменить системные переменные среды"
  3. Диалог откроется. Нажмите кнопку "Переменные среды" внизу диалога.
  4. Теперь у вас есть небольшое окно для редактирования переменных. Просто нажмите кнопку "Создать", чтобы добавить новую переменную среды. Легко.

Ответ 12

Как расширение ответа @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-факторную конфигурацию.

Ответ 13

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

а. Имеют разные конфигурационные файлы:

  • dev.js//для этого есть все переменные среды для разработки

    Файл содержит:

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

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

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

ПРИМЕЧАНИЕ: значения меняются в среде, в основном, но ключи остаются такими же.

  1. у вас может быть больше

  2. z__prod.js//у этого есть все переменные среды для производства/жить только
    ПРИМЕЧАНИЕ. Этот файл никогда не поставляется для развертывания.

  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 из файла конфигурации

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

поэтому мы пишем автоматизацию в ОС Windows (или других)

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

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

a) Это берет ввод из переданной переменной аргумента ('dev' на данный момент)
б) прочитать соответствующий файл ('config\dev.js')
c) устанавливает переменные среды в ОС 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 и готовы к использованию одной и той же программой (которая всегда запрашивает process.env.someEnvKey1, но значение, которое он получает, равно qa).

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

Ответ 14

Я получил undefined после установки системы env var. Когда я помещаю APP_VERSION в пользовательский env var, я могу отобразить значение из node через process.env.APP_VERSION

Ответ 15

Сделайте свою жизнь проще с помощью dotenv-webpack. Просто установите его npm install dotenv-webpack --save-dev, затем создайте файл .env в корневом каталоге приложения (не забудьте добавить его в .gitignore перед вами git push). Откройте этот файл и установите там некоторые переменные среды, например:

ENV_VAR_1=1234
ENV_VAR_2=abcd
ENV_VAR_3=1234abcd

Теперь в настройках вашего веб-пакета добавьте:

const Dotenv = require('dotenv-webpack');
const webpackConfig = {
  node: { global: true, fs: 'empty' }, // Fix: "Uncaught ReferenceError: global is not defined", and "Can't resolve 'fs'".
  output: {
    libraryTarget: 'umd' // Fix: "Uncaught ReferenceError: exports is not defined".
  },
  plugins: [new Dotenv()]
};
module.exports = webpackConfig; // Export all custom Webpack configs.

Требуются только const Dotenv = require('dotenv-webpack');, plugins: [new Dotenv()] и, конечно, module.exports = webpackConfig; // Export all custom Webpack configs.. Однако в некоторых случаях вы можете получить некоторые ошибки. Для этого у вас также есть решение, подразумевающее, как вы можете исправить определенную ошибку.

Теперь, где вы хотите, вы можете просто использовать process.env.ENV_VAR_1, process.env.ENV_VAR_2, process.env.ENV_VAR_3 в своем приложении.

Ответ 16

Если вы используете mac/linux и хотите получить локальные параметры для машины, которую вы используете, это то, что вы будете делать:

  1. В терминале запустите nano ~/.bash_profile
  2. добавьте строку, например: export MY_VAR = var
  3. сохранить & запустите источник ~/.bash_profile
  4. в узле используйте как: console.log(process.env.MY_VAR);