【问题标题】:Environment Variables and detecting environment NodeJS/React环境变量和检测环境 NodeJS/React
【发布时间】:2020-01-23 19:25:15
【问题描述】:

我研究了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)为你管理吗?还是用其他工具/技术完成的?

提前致谢

【问题讨论】:

标签: javascript node.js dotenv


【解决方案1】:

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

例如,

.env(本地)

API_KEY=local_api_key

.env(测试中)

API_KEY=test_api_key

The base principle 表示separation 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; 
...
}

【讨论】:

    【解决方案2】:

    好吧,经过一番消化,问题实际上来自对如何使用环境变量的基本误解。我在想象这样一种情况,即实时环境变量应该在应用程序中(可能在某个 JSON 文件中),然后根据应用程序所处的环境使用。

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

    这样,当您使用 API_KEY=1234 进行本地开发时,它会在实时使用 API_KEY=4567 被覆盖并且没有(如果环境 == 实时),然后执行此操作...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 2021-06-18
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多