0

我研究了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 (或安全的 dot env)一样为您管理?或者这是用另一种工具/技术完成的?

提前致谢

4

2 回答 2

1

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

例如,

.env(本地)

API_KEY=local_api_key

.env(测试中)

API_KEY=test_api_key

基本原理separation of config from code。(该.env文件可能包含在.gitignore

以您的方式,如果添加了一些环境(如第 2 阶段),则可能会添加一些相关代码。


如果您想通过将环境部署为代码来获得一组常量值,只需创建config.local.jsconfig.test.js......

考虑下面的代码)

let constSet;
switch(process.env.DEPLOY_ENV) {
   case 'local':
      constSet = require('./config.local')
      break; 
...
}
于 2019-09-23T17:41:10.610 回答
0

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

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

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

于 2019-09-23T21:58:26.220 回答