环境变量和检测环境NodeJS / React

时间:2019-09-23 17:17:45

标签: javascript node.js dotenv

我研究了dotenv之类的东西,并了解了环境变量的概念,我缺少的部分是何时何地检测要使用哪个变量。具体来说,我正在处理Stripe API密钥,当然,我想在本地开发时使用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(或secure dot env)为您管理这件事?还是用其他工具/技术来完成?

预先感谢

2 个答案:

答案 0 :(得分:1)

无论部署环境如何,dotenv建议使用相同名称的env变量。

例如,

.env(本地)

API_KEY=local_api_key

.env(测试中)

API_KEY=test_api_key

The base principleseparation of config from code。 (.env文件可能包含在.gitignore中)

以您的方式,如果添加了某些环境(如Stage-2),则可能会添加一些关联的代码。


如果要通过将环境作为代码部署而具有一组常量值,则只需创建config.local.jsconfig.test.js .....

考虑以下代码)

let constSet;
switch(process.env.DEPLOY_ENV) {
   case 'local':
      constSet = require('./config.local')
      break; 
...
}

答案 1 :(得分:0)

再消化一下之后,问题实际上出在对如何使用环境变量的根本误解上。我正在想象这样一种情况:实时环境变量应该在应用程序中(也许在JSON文件中的某个位置),然后根据应用程序所处的环境使用它。

但是实际上是(或者至少在我看来)您需要在环境中设置环境变量的情况-而不是代码!因此,例如在AWS或Google Cloud上,这些将覆盖您用于本地使用的任何内容,因为@getElementsByNature暗示使用相同的命名约定

这样,当您使用API​​_KEY = 1234在本地进行开发时,它将被API_KEY = 4567实时覆盖,并且没有(如果环境== live),则可以这样做...