您可以设置您的文件夹目录如下:
config.js
var config = {};
//development
var env = process.env.NODE_ENV || 'development';
if(env === 'development'){
config = require('./env/development');
}else if (env === 'test'){
config = require('./env/test');
} else if(env === 'production'){
config = require('./env/production');
}
module.exports = config;
development.js
个
var envFile = __dirname + '/env.json';
var jsonfile = require('jsonfile');
var envVars = jsonfile.readFileSync(envFile);
module.exports = {
value: envVars["VALUE"]
};
production.js
module.exports = {
value: process.env.VALUE
};
test.js
module.exports = {
value: 'Some value'
};
这里的基本思想是每个开发人员可以在自己的env.json文件来配置自己的密钥。对于生产,您可以将它们存储在某个安全的文件中,然后将它们加载到环境中,然而在运行应用程序之前需要将其加载。使用heroku,可以轻松配置这些环境变量并将其存储起来。检查出来here
你也可以省略任何细节,你可能不需要像开发或测试的东西。
编辑:一个例子
在命令行试试这个第一个获得正在发生的事情的想法。在这个例子中,我使用的是Linux。如果您正在使用其他任何方法,只需研究如何在您正在使用的命令行中设置环境变量即可。
app。JS
var config = require('./config/config');
//get value from config
var value = config.value;
从bash命令行
$: VALUE="my value"
$: NODE_ENV="production"
$: export VALUE
$: export NODE_ENV
运行应用程序设置环境变量
$: node app.js
,或者如果你正在使用NPM脚本
$: npm start
当您运行应用程序节点时,将自动加载process.env
与在命令行shell中定义的每个可变环境。现在,如果您使用的是heroku,您可以按照我之前在此答案中发布的链接进行操作,而不必设置它们。只需在heroku界面中定义它们,它会为你加载它们。
感谢您的快速反应,但我有问题,所有关于确保我知道每一步发生了什么。 1)我假设process.env.NODE_ENV将由我设置,因为shell或Heroku系统在部署时将使其生成'生产',因此它不会默认为开发,是正确的吗? 2)您在开发代码片段中添加的'envFile'是否包含我的密钥的所有KEY = VALUE对,或者是否将它放在您放置在底部的'module.exports'部分中,如果这是情况下,在'envFile'中发生了什么?很抱歉。我想知道最新情况以及... – KellysOnTop23
是的,正确的。是的,它将是标准的JSON。就像这个'{“VALUE”:“一些其他的值”}',没有别的。没有'module.exports'。当然,这是我的例子所特有的。你可以使用任何你想要的东西(即从文本文件,yaml,csv中加载)。基本的想法是开发环境应该从你可以放入的文件中加载值,生产在环境变量中定义,并且测试通常是硬编码的。所以,只需要拿出你需要的东西,它就应该适合你。 –
Gotcha。是的,环顾大家提到它,但我没有找到太多明确的解释代码。也许我只是没有看。在我去之前,把它放在我的项目Id中,想再问一个问题。做完这些并以这种方式获得我所有的价值后,它会安全吗?我不是在这里寻找堡垒诺克斯,但只是足够的基础知识覆盖,没有人可以轻松地拿我的钥匙 – KellysOnTop23