17

我有一个简单的 node.js 后端脚本,我想从 config.json 文件和环境变量中捕获命令行参数以及键/值。后两个我没有问题,但我在捕获命令行参数时遇到了几乎莫名其妙的麻烦。

可以通过这种方式捕获命令行参数:

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],只是索引被改变了。

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

有nconf经验的人愿意帮忙吗?

4

3 回答 3

10

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

//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 可执行文件

于 2015-05-06T21:08:30.020 回答
7

略短/更清洁:

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];

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

于 2015-05-07T01:42:24.137 回答
2

尝试这个

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

它在 Windows 中为我工作

于 2018-11-18T07:07:17.263 回答