使用NCONF捕获命令行参数

我有一个简单的node.js后端脚本,我想捕获命令行参数以及来自config.json文件和环境variables的键/值。 第二个我没有问题,但我有几乎莫名其妙的捕获命令行参数的麻烦。

可以这样捕获命令行参数:

var nconf = require('nconf'); nconf.argv().env().file({file: './config.json'}); var csvFilePath = nconf.argv().get()._[0]; // var csvFilePath = process.argv[2]; var csvType = nconf.argv().get()._[1]; // var csvType = process.argv[3]; 

这两个调用相当于process.argv [index],只是索引被改变了。

必须有更直接的方法来捕获命令行参数,但即使debugging并查看nconf产生的variables,我仍然无法弄清楚。

有nconf经验的人都在意帮忙吗?

我相信这样做的最好方法是这样的:

 //contents of app.js var nconf = require('nconf').argv(); 

如果你用下面的命令行命令调用你的程序:

 node app.js --one foo --two bar 

那么在你的程序中你可以像这样访问这些命令行参数:

 var nconf = require('nconf').argv(); var one = nconf.get('one'); //one = 'foo' var two = nconf.get('two'); //two = 'bar' 

所以你需要标识符前面的 – 符号,然后你可以访问命令行参数。

坦率地说,作为给nconf模块作者Charlie Robbins的一个消息,我认为最好不要把所有的东西混合成一个大的散列。

如果你这样做会更好:

 var foo = nconf.argv.get('one'); var node_env = nconf.env.get('NODE_ENV'); 

我认为这是更直观,更不容易出错。

另外,对于那些以'npm start'开始的节点:

据我所知,你需要两个额外的连字符,如下所示:

 npm start -- --one foo --two bar 

用额外的连字符/破折号让Bash知道args是用于你的node.js可执行文件,而不是用于NPM node.js可执行文件

稍短/清洁:

 var nconf = require('nconf'); nconf.argv().env().file({file: './config.json'}); var csvFilePath = nconf.get('_')[0]; // var csvFilePath = process.argv[2]; var csvType = nconf.get('_')[1]; // var csvType = process.argv[3]; 

如果你给你的参数命名(例如, .get('foo') --foo=bar-f bar ),那么你可以使用.get('foo').get('f')而不是使用数组索引。