我刚刚开始用NodeJS编写我的第一个应用程序,我必须说它很高兴学习如何使用:)
我已经达到了在启动服务器之前进行一些配置的程度,我想从config.json
文件加载配置。
到目前为止我找到了一些方法,要么请求json文件和leaver节点需要解析它,使用config.js
文件并导出我的配置,使用nconf,这似乎很容易使用,或者我见过的最后一个选项是使用optimist我认为它会比ncond更好。虽然我开始认为后者,乐观主义者,只能用于解析节点cli中的参数。
所以我在这里问,我可以使用节点优化器从文件中获取配置,或者,如果没有,我应该使用nconf吗?或者,也许,那里有一些我不知道的更好更轻量的东西? (此时我的选项非常模糊,因为我不确定在某些时候我是否要解析cli中的任何配置。)
答案 0 :(得分:9)
我使用这样的config.js文件:
var config = {} config.web = {}; config.debug = {}; config.server_name = 'MyServerName'; config.web.port = process.env.WEB_PORT || 32768; config.debug.verbositylevel = 3; module.exports = config;
然后我可以像这样调用配置变量:
var port = config.web.port;
我觉得这样维护要容易得多。希望对你有帮助。
答案 1 :(得分:4)
我使用dotenv。这很简单:
var dotenv = require('dotenv');
dotenv.load();
然后,您只需使用配置设置创建一个.env文件。
S3_BUCKET=YOURS3BUCKET
SECRET_KEY=YOURSECRETKEYGOESHERE
免责声明:我是创建者,并没有发现config.json文件方法在生产环境中有用。我更喜欢从环境变量中获取配置。
答案 2 :(得分:0)
6 年后,答案应该是:使用 Nconf。太棒了。
//
// yourrepo/src/options.js
//
const nconf = require('nconf');
// the order is important
// from top to bottom, a value is
// only stored if it isn't found
// in the preceding store.
// env values win all the time
// but only if the are prefixed with our appname ;)
nconf.env({
separator: '__',
match: /^YOURAPPNAME__/,
lowerCase: true,
parseValues: true,
transform(obj) {
obj.key.replace(/^YOURAPPNAME__/, '');
return obj;
},
});
// if it's not in env but it's here in argv, then it wins
// note this is just passed through to [yargs](https://github.com/yargs/yargs)
nconf.argv({
port: {
type: 'number'
},
})
// if you have a file somewhere up the tree called .yourappnamerc
// and it has the json key of port... then it wins over the default below.
nconf.file({
file: '.yourappnamerc'
search: true
})
// still not found, then we use the default.
nconf.defaults({
port: 3000
})
module.exports = nconf.get();
然后在任何其他文件中
const options = require('./options');
console.log(`PORT: ${options.port}`);
现在你可以像这样运行你的项目:
$ yarn start
# prints PORT: 3000
$ YOURAPPNAME__PORT=1337 yarn start
# prints PORT: 1337
$ yarn start --port=8000
# prints PORT: 8000
$ echo '{ "port": 10000 }' > .yourappnamerc
$ yarn start
# prints PORT: 10000
如果你忘记了你有什么选择
$ yarn start --help
# prints out all the options