Переменные среды и среда обнаружения NodeJS / React - PullRequest
0 голосов
/ 23 сентября 2019

Я посмотрел на такие вещи, как dotenv и получил представление о переменных среды. Я пропускаю часть, где и когда происходит определение используемой переменной.Если говорить конкретно, я имею дело с ключом API Stripe и, конечно, я хочу использовать ключ Test API при локальной разработке, а затем ключ Live API при запуске в производство.

ОчевидноУ меня будет файл .env с чем-то вроде:

test_API_KEY=1234
live_API_KEY=5678

Но тогда наверняка где-нибудь в моем коде мне понадобится что-то вроде

var keyToUse;
if(productionEnvironment){
     keyToUse = process.env.live_API_KEY
}
else if(!productionEnvironment){
     keyToUse = process.env.test_API_KEY
}

Или как dotenv (или безопасная точка env ) управлять этим для вас?Или это делается с помощью другого инструмента / техники?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

dotenv рекомендует использовать одно и то же имя переменной env независимо от среды развертывания.

Например,

.env (локально)

API_KEY=local_api_key

.env (в тесте)

API_KEY=test_api_key

Базовый принцип гласит separation of config from code.(файл .env может быть включен в .gitignore)

По-вашему, если добавляется какая-то среда (например, этап 2), может быть добавлен некоторый связанный код.


Если вы хотите иметь набор постоянных значений при развертывании сред в виде кода, просто создайте config.local.js, config.test.js .....

(см. Код ниже)

let constSet;
switch(process.env.DEPLOY_ENV) {
   case 'local':
      constSet = require('./config.local')
      break; 
...
}
0 голосов
/ 24 сентября 2019

Хорошо, после некоторого переваривания проблема фактически возникает из-за фундаментального недопонимания того, как использовать переменные среды.Я представлял себе ситуацию, когда переменные действующей среды должны находиться в приложении (возможно, где-то в файле JSON), а затем использоваться в соответствии с тем, в какой среде было приложение.

Но на самом деле это так (или, по крайней мере,мне кажется) что нужно установить переменную окружения, В ОКРУЖАЮЩЕЙ СРЕДЕ - не код!Так, например, в AWS или Google Cloud они будут перезаписывать все, что вы используете для локального использования, так как @getElementsByNature ссылается на то же соглашение об именах

Таким образом, когда вы разрабатываете локально с API_KEY = 1234, оно перезаписываетсяв прямом эфире с API_KEY = 4567 и нет (если среда == в прямом эфире), то сделайте это ...

...