nodejs配置模块optimist还是nconf?

时间:2013-05-31 19:11:31

标签: node.js

我刚刚开始用NodeJS编写我的第一个应用程序,我必须说它很高兴学习如何使用:)

我已经达到了在启动服务器之前进行一些配置的程度,我想从config.json文件加载配置。

到目前为止我找到了一些方法,要么请求json文件和leaver节点需要解析它,使用config.js文件并导出我的配置,使用nconf,这似乎很容易使用,或者我见过的最后一个选项是使用optimist我认为它会比ncond更好。虽然我开始认为后者,乐观主义者,只能用于解析节点cli中的参数。

所以我在这里问,我可以使用节点优化器从文件中获取配置,或者,如果没有,我应该使用nconf吗?或者,也许,那里有一些我不知道的更好更轻量的东西? (此时我的选项非常模糊,因为我不确定在某些时候我是否要解析cli中的任何配置。)

3 个答案:

答案 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