Установка переменных среды для узла для извлечения
Я пытаюсь следовать учебнику, и он говорит:
"Существует несколько способов загрузки учетных данных.
- Загружается из переменных среды,
- Загружается из файла 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
Ответ 9
Для пользователей Windows этот вопрос о переполнении стека и верхний ответ весьма полезны в том, как устанавливать переменные environement через командную строку
Как установить NODE_ENV = производство в Windows?
Ответ 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 файл в вашем проекте - это лучший метод, потому что это будет означать, что вы можете переместить ваш проект в другие системы без необходимости устанавливать переменные среды на этой системе, так как вы можете запустить свой код.
-
Создайте файл .env
в корневой папке вашего проекта с содержимым: TEST="hello world"
-
Напишите некоторый код узла, который будет читать этот файл. Я предлагаю установить dotenv (npm install dotenv --save
), а затем добавить require('dotenv').config();
во время установки кода вашего узла.
- Теперь ваш код узла сможет получить доступ к
process.env.TEST
Env файлы хорошо хранят API-ключи и другие секреты, которые вы не хотите иметь в своей базе кода. Просто убедитесь, что добавили его в свой .gitignore
.
Б) Используйте Powershell - это создаст переменную, которая будет доступна в других терминалах. Но будьте осторожны, переменная будет потеряна после перезагрузки компьютера.
[Environment]::SetEnvironmentVariable("TEST", "hello world", "User")
Этот метод широко рекомендуется на форумах Windows, но я не думаю, что люди знают, что переменная не сохраняется после перезапуска системы....
C) Используйте графический интерфейс Windows - это не так круто, как команда, но, по крайней мере, оно работает и создает постоянную переменную.
- Найдите "Переменные среды" в меню "Пуск" или в панели управления.
- Выберите "Изменить системные переменные среды"
- Диалог откроется. Нажмите кнопку "Переменные среды" внизу диалога.
- Теперь у вас есть небольшое окно для редактирования переменных. Просто нажмите кнопку "Создать", чтобы добавить новую переменную среды. Легко.
Ответ 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'
};
ПРИМЕЧАНИЕ: значения меняются в среде, в основном, но ключи остаются такими же.
-
у вас может быть больше
-
z__prod.js//у этого есть все переменные среды для производства/жить только
ПРИМЕЧАНИЕ. Этот файл никогда не поставляется для развертывания.
-
Поместите все эти файлы конфигурации в папку /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 и хотите получить локальные параметры для машины, которую вы используете, это то, что вы будете делать:
- В терминале запустите nano ~/.bash_profile
- добавьте строку, например: export MY_VAR = var
- сохранить & запустите источник ~/.bash_profile
- в узле используйте как: console.log(process.env.MY_VAR);