Как установить свойства системы в JavaScript [duplicate]

Это будет то, что параллелизм и threading для.

289
задан user1107173 19 September 2016 в 17:04
поделиться

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 для экспорта переменных.

274
ответ дан SamT 15 August 2018 в 21:56
поделиться
  • 1
    Если вы используете fish вместо bash, вам нужно использовать: env USER_ID=239482 my_command. Например, для установки переменных среды для библиотеки node.js 'debug: env DEBUG='*' node some_file.js fishshell.com/docs/current/faq.html#faq-single-env – SilentSteel 22 October 2014 в 16:21
  • 2
    Я обнаружил, что мне нужно удалить цитаты вокруг «*». для его работы: env DEBUG=* node some_file.js – divillysausages 8 July 2015 в 21:20
  • 3
    @SamT как установить эти переменные в Linux Ubuntu? – student 12 June 2017 в 19:43
  • 4
    возможно ли добавить файл, а не добавлять большое количество скриптов env или пользователь unix должен создать сценарий bash? – mibbit 8 July 2017 в 16:47

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

3
ответ дан Blairg23 15 August 2018 в 21:56
поделиться

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

. Как я могу установить NODE_ENV = production в Windows?

4
ответ дан Community 15 August 2018 в 21:56
поделиться
  • 1
    Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - Из обзора – Eric Hauenstein 6 February 2018 в 18:42

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

https://github.com/motdotla/dotenv

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

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

FOO=bar
BAZ=bob

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

require('dotenv').config();

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

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

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

124
ответ дан ctrlplusb 15 August 2018 в 21:56
поделиться
  • 1
    Хотя, если вы разместите необходимые сведения о конфигурации, которые требуются вашему приложению (например, этот вопрос интересуется), тогда он, вероятно, упадет в его отсутствие .. но он по-прежнему кажется хорошим вариантом. – John 13 January 2016 в 19:20
  • 2
    Если вы ищете дополнительную безопасность, тогда github.com/rolodato/dotenv-safe и несколько тестов должны это сделать. – ctrlplusb 14 January 2016 в 00:35
  • 3
    Если вы хотите не требовать его в своем приложении: github.com/direnv/direnv – AlecRust 26 January 2016 в 20:16
  • 4
    Удивительный человек, Ты спасаешь мой день. спасибо – Nguyễn Anh Tuấn 28 December 2016 в 11:17
  • 5
    Я когда-то был слеп, теперь я вижу – webdevinci 9 May 2017 в 12:19

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

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

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

edit: env var, похоже, не сохраняется после перезапуска. поэтому я решил настроить его через графический интерфейс под My Computer, чтобы он сохранялся навсегда

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

3
ответ дан Drkawashima 15 August 2018 в 21:56
поделиться

Если вы хотите вариант управления, попробуйте пакет 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 для выполнения эквивалента 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));
48
ответ дан Erik Gillespie 15 August 2018 в 21:56
поделиться
  • 1
    Хм, я попытался использовать этот пакет, но, похоже, только отслеживает использование переменных среды. Он не читает файл .env ( npmjs.com/package/envs ). Это правильный пакет? – wawka 15 April 2015 в 11:57
  • 2
    Ты прав! Он не читает файл .env. Это раздражительно. Я забыл, что загружал файл .env с помощью сценария bash, как упоминал @SamT, поэтому он все равно работал. – Benxamin 15 April 2015 в 19:46
  • 3
    & Quot; требуется ( '') envs & Quot ;? Что такое «envs»? – CodyBugstein 26 September 2016 в 01:10
  • 4
    'envs' - это имя узла узла: npmjs.com/package/envs – Benxamin 26 September 2016 в 22:03
  • 5
    Также я рекомендую использовать "dotenv" модуль, он поместил все переменные ENV в объект proccess, довольно аккуратный, кстати. – Bruno de Oliveira 17 February 2017 в 18:30

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

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

export FOO=bar

информация об переменных среды на ubuntu (например):

Переменные окружения на ubuntu

29
ответ дан leszek.hanusz 15 August 2018 в 21:56
поделиться

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

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

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

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

  1. у вас может быть больше
  2. z__prod.js // у этого есть все переменные среды для production / live only ПРИМЕЧАНИЕ. Этот файл никогда не поставляется в комплекте для развертывания
  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 отличается от других , поскольку он не будет использоваться всеми.

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

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

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

  1. Предположим, что мы пишем файл setenv bat, который принимает один аргумент, который окружение, которое мы хотим установить
  2. Теперь запустите «setenv dev»

a) Взятие данных из переданной переменной аргумента (теперь «dev») b) прочитайте соответствующий файл ('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 и готовы к использованию одной и той же програмой m (который всегда запрашивает process.env.someEnvKey1, но значение, которое он получает, является qa одним).

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

1
ответ дан Manohar Reddy Poreddy 15 August 2018 в 21:56
поделиться

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

0
ответ дан omencat 15 August 2018 в 21:56
поделиться

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

USER_ID='abc' USER_KEY='def' node app.js
79
ответ дан palanik 15 August 2018 в 21:56
поделиться
  • 1
    Это все еще не работает на Windows :( – Tibor Szasz 25 June 2015 в 10:23
  • 2
    Просто добавив, что это сработало для меня в Windows с оболочкой bash (cygwin, установленной с помощью git-инструментов, я думаю). – markau 17 March 2016 в 02:45
  • 3
    @TiborSzasz: Cygwin или Powershell должны это исправить. Это упоминается два года спустя, конечно. – orlando marinella 14 June 2016 в 14:15
  • 4
    Для Windows используйте: SET USER_ID = 'abc' – Mike 16 August 2016 в 09:08
  • 5
    Мы можем использовать пакет cross-env ( npmjs.com/package/cross-env ), чтобы он работал на unix или windwos – Brij 20 December 2016 в 09:41

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

node-env-file

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

.env

# some env variables

FOO=foo1
BAR=bar1
BAZ=1
QUX=
# QUUX=
4
ответ дан Sean McClory 15 August 2018 в 21:56
поделиться

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

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

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

46
ответ дан Sebas 15 August 2018 в 21:56
поделиться
  • 1
    ... переменные окружения предназначены для установки снаружи кода, а не внутри, - поэтому это побеждает цель и плохой пример – Soren 27 May 2016 в 11:40
  • 2
    @Soren наша узловая программа, которая запускает дочерний процесс, выиграла от этого ответа, поэтому для этого есть примеры использования, хотя это немного неортодоксальный – pspi 11 June 2016 в 04:42
  • 3
    @pspi - я на 99% уверен, что вы делаете это неправильно , и если вы не являетесь автором конфигурационного пакета , подобного этому , вы должны вместо этого используйте такой конфигурационный пакет. – Soren 12 June 2016 в 17:59
  • 4
    Это полезно, если вы пишете скрипты сборки в js и запускаете их из npm – Stephen Drew 10 November 2016 в 23:49
  • 5
    Это также полезно для, например, настройки и переопределения среды при выполнении тестов. – mtkopone 29 May 2017 в 11:36

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

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

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

process.env = {
  FOO_BAR: 'baz'
  'FOO_                  
1
ответ дан simonepri 15 August 2018 в 21:56
поделиться
0
ответ дан dpolicastro 29 October 2018 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: