Узел.js: установка переменных окружения
Я пытаюсь следовать учебнику, и он говорит:
"есть несколько способов, чтобы загрузить данные.
- загрузить из переменных окружения,
- загружено из файла JSON на диске,
ключи должны быть следующими:
USER_ID, USER_KEY
...Это означает, что при правильной настройке переменных среды управление учетными данными в приложении вообще не требуется."
на основе некоторых Googling, он появляется что мне нужно установить переменные в process.env? Как и где я могу установить эти учетные данные? Пример Пожалуйста.
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); // barThe'.файл env ' не требуется, поэтому вам не нужно беспокоиться о том, что ваше приложение упадет в его отсутствие.
если вы хотите вариант управления, попробовать 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в вашем репозитории управления версиями (добавьте его в свой.gitignorefile).чтобы получить переменные из
.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 (например):
для пользователей windows этот вопрос переполнения стека и верхний ответ весьма полезны о том, как установить переменные среды через командную строку
наткнулся на хороший инструмент для этого.
анализирует и загружает файлы среды (содержащие экспорт переменных 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-коэффициент конфигурации.
очень хороший способ сделать переменные среды, которые я успешно использовал ниже:
А. есть разные конфигурационные файлы:
dev.js // это имеет все переменные среды только для разработки
Файл содержит:module.exports = { ENV: 'dev', someEnvKey1 : 'some DEV Value1', someEnvKey2 : 'some DEV Value2' };этап.js / / это имеет все переменные среды только для разработки
..qa.js // это все переменные среды для тестирования только
Файл содержит:module.exports = { ENV: 'dev', someEnvKey1 : 'some QA Value1', someEnvKey2 : 'some QA Value2' };Примечание: значения меняются с окружающей средой, в основном, но ключи остаются такими же.
вы можете иметь больше
z_ _ prod.Яш // все переменные среды для производства/жить только
Примечание: этот файл никогда не поставляется в комплекте для развертыванияпоставить все эти конфигурационные файлы в/ 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 (или другой)
предположим, что мы пишем'setenv' bat-файл, который принимает один аргумент, который является средой, которую мы хотим установить
Теперь запустите " 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