bor*_*res 2 javascript node.js node-commander
我正在使用commander.js来解析命令行参数,我试图收集一个可以多次出现的可选参数,它总是返回我设置的选项和默认选项。
function collect (val, memo) {
memo.push(val);
return memo;
}
program
.command('run <param>')
.action(function run(param, options) {
console.log(param);
console.log(options.parent.config);
});
program
.option('-c, --config <path>', 'Config', collect, ["/path/to/default"])
.parse(process.argv);
Run Code Online (Sandbox Code Playgroud)
当我这样调用脚本时:
index.js run some -c "/some/path" -c "/other/path"
Run Code Online (Sandbox Code Playgroud)
它打印:
[ '/path/to/default', '/some/path', '/other/path' ]
Run Code Online (Sandbox Code Playgroud)
但它应该只打印:
['/some/path', '/other/path' ]`
Run Code Online (Sandbox Code Playgroud)
当我在没有-c参数的情况下调用它时,它可以正常工作,使用默认值打印数组。我怎样才能解决这个问题?
在commander“重复值”选项不支持默认值,至少在某种程度上使您不必编写自己的逻辑来处理的情形,其中用户通过一个或多个值。根据您编写代码的方式,您必须检查program.config属性的大小:
-c选项值,则大小为> 1;=== 1。IMO,这种情况需要“A list”选项,它支持默认值,并为您节省一些额外的工作。喜欢:
program
.option('-l, --list <items>', 'A list', list, [ "/path/to/default" ])
.parse(process.argv);
Run Code Online (Sandbox Code Playgroud)
要访问传递的值,只需调用program.list,并在命令行中使用值调用它:
$ index.js run some -l "/some/path","/other/path"
// where console.log(program.list) prints [ "/some/path", "/other/path" ]
Run Code Online (Sandbox Code Playgroud)
或者,没有值:
$ index.js run some
// where console.log(program.list) prints [ "/path/to/default" ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5332 次 |
| 最近记录: |