6

我刚刚开始使用 NodeJS 编写我的第一个应用程序,我必须说学习如何使用它是一种乐趣:)

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

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

所以我在这里问,我可以使用 node optimist 从文件中获取我的配置,或者,如果不是,我应该使用 nconf 吗?或者,也许有一些我不知道的更好更轻量级的东西?(此时我的选择非常模糊,因为我不确定是否在某个时候我想解析来自 cli 的任何配置)。

4

3 回答 3

10

我使用这样的 config.js 文件:

变量配置 = {}
配置.web = {};
config.debug = {};

config.server_name = '我的服务器名';
config.web.port = process.env.WEB_PORT || 32768;

config.debug.verbositylevel = 3;

module.exports = 配置;

然后我可以像这样调用配置变量:

var port = config.web.port;

我发现这样维护起来要容易得多。希望对您有所帮助。

于 2013-05-31T19:16:25.890 回答
4

我使用dotenv。这很简单:

var dotenv = require('dotenv');
dotenv.load();

然后,您只需使用您的配置设置创建一个 .env 文件。

S3_BUCKET=YOURS3BUCKET
SECRET_KEY=YOURSECRETKEYGOESHERE

免责声明:我是创建者,并没有发现 config.json 文件方法在生产环境中有用。我更喜欢从我的环境变量中获取配置。

于 2014-04-30T01:02:55.413 回答
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
于 2021-02-16T09:10:09.577 回答