我研究了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)为您管理这件事?还是用其他工具/技术来完成?
预先感谢
答案 0 :(得分: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.js
,config.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),则可以这样做...