Node.js nodejs配置模块优化程序还是NCOF?

Node.js nodejs配置模块优化程序还是NCOF?,node.js,Node.js,我刚刚开始用NodeJS编写我的第一个应用程序,我必须说学习如何使用它是一种乐趣:) 在启动服务器之前,我已经完成了一些配置,我想从config.json文件加载配置 到目前为止,我已经找到了一些方法,或者请求json文件和leaver节点需要解析它,使用config.js文件并导出我的配置,使用,这似乎很容易使用,或者我看到的最后一个选项是使用我认为比NCOD更好的配置。尽管我开始认为后者optimist只能用于解析来自节点cli的参数 所以我在这里问,我可以使用node optimist从文

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

在启动服务器之前,我已经完成了一些配置,我想从
config.json
文件加载配置

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


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

我使用的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;
我发现这样保养要容易得多。希望对你有帮助。

我用。这很容易:

var dotenv = require('dotenv');
dotenv.load();
然后,您只需使用配置设置创建一个.env文件

S3_BUCKET=YOURS3BUCKET
SECRET_KEY=YOURSECRETKEYGOESHERE

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

6年后,答案应该是:使用Nconf。太棒了

//
//yourrepo/src/options.js
//
const nconf=要求('nconf');
//订单很重要
//从上到下,一个值是
//仅在未找到时存储
//在前面的商店里。
//环境价值观一直是赢家
//但仅当前缀为我们的appname;)
NCOF.env({
分隔符:'''',
匹配:/^YOURAPPNAME\uuuu/,
小写:true,
parseValues:true,
变换(obj){
obj.key.replace(/^YOURAPPNAME_u/,'');
返回obj;
},
});
//如果它不在env中,但在argv中,则它获胜
//注意,这只是传递给[yargs](https://github.com/yargs/yargs)
nconf.argv({
端口:{
键入:“数字”
},
})
//如果在树的某个地方有一个名为.yourappnamerc的文件
//它有一个json密钥端口。。。然后它将战胜下面的默认值。
文件({
文件:'.yourappnamerc'
搜索:正确
})
//仍然没有找到,那么我们使用默认值。
默认值({
港口: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

如果你忘了你有什么选择

纱线开始-帮助
#打印出所有选项

这似乎是迄今为止我见过的最简单的解决方案,尽管我想将配置保存在json文件中,或者您对此有何输入?如果您想这样做,我会说使用nconf:)使用
exports.config=函数(请求,响应){return config;}
,这需要我在执行另一个文件中的
.request()
时执行
new config()
,对吗?如果需要,可以只执行
require(“./config.json”)
。Node.js内置了对JSON文件的支持。像nconf这样的东西只有在你想合并不同的配置对象时才相关。异步模块呢,它没有合并对象的方法吗?所以,除非我需要cli中的任何参数,否则nconf将是一个开销,对吗?异步不会合并对象。Async用于处理异步函数,特别是以批处理方式使用它们。有一个“defaults”函数,可用于向对象添加默认值,但只能在一个级别上使用。不过,在npm中搜索“deep extend”会得到各种包。我明白,我似乎很难区分所有模块:)我在前端使用下划线已经有一段时间了,在为移动设备开发时,为了支持jQuery,我通常使用
.extend()
函数,当我需要进行递归合并时,我使用jQuery的递归版本(extend方法有一个进行递归对象合并的选项)。但是回到问题的主题,阅读JSON文件是一种比使用lib更方便的方法?我提到了这种可能性,因为就您描述的用例而言,不需要引入模块。最好知道节点本身可以做什么。如果你能为自己提供更多的通用库,这也很方便。你很有可能在其他地方使用下划线。此外,您还可以根据自己的独特需求定制配置方式。我建议你先自己动手,然后如果你觉得自己在重新发明方向盘(这样做没有乐趣),找一个模块。但需要(和嵌套模块)的是Node的基本功能。我使用相同的功能,但在ruby中:)不错。这就是灵感的来源。我在ruby中也使用同样的方法。