Javascript Commander.js collect多个选项始终包括默认值

Javascript Commander.js collect多个选项始终包括默认值,javascript,node.js,node-commander,Javascript,Node.js,Node Commander,我正在使用解析命令行参数,并尝试收集一个可选参数,该参数可以出现多次,并且它总是返回我设置的选项和默认选项 函数收集(val、备忘录){ 备忘录推送(val); 返回备忘录; } 程序 .command('run') .操作(函数运行(参数、选项){ 控制台日志(param); log(options.parent.config); }); 程序 .option('-c,--config',config',collect,[“/path/to/default”]) .parse(process.

我正在使用解析命令行参数,并尝试收集一个可选参数,该参数可以出现多次,并且它总是返回我设置的选项和默认选项

函数收集(val、备忘录){
备忘录推送(val);
返回备忘录;
}
程序
.command('run')
.操作(函数运行(参数、选项){
控制台日志(param);
log(options.parent.config);
});
程序
.option('-c,--config',config',collect,[“/path/to/default”])
.parse(process.argv);
当我这样调用脚本时:

index.js运行some-c”/some/path“-c”/other/path
它打印:

[ '/path/to/default', '/some/path', '/other/path' ]
但它应该只打印:

['/some/path', '/other/path' ]`
当我在没有
-c
参数的情况下调用它时,它工作正常,使用默认值打印数组。如何解决此问题?

commander的“Repeatable value”选项不支持默认值,至少在某种程度上可以避免您必须编写自己的逻辑来处理用户传递一个或多个值的情况。 按照编写代码的方式,必须检查
program.config
属性的大小:

  • 如果用户传递一个或多个
    -c
    选项值,则大小为
    >1
  • 否则,它是
    ==1
在我看来,这个场景需要“列表”选项,它支持默认值,并为您节省了一些额外的工作。比如:

program
  .option('-l, --list <items>', 'A list', list, [ "/path/to/default" ])
  .parse(process.argv);
或者,如果没有值:

$ index.js run some
// where console.log(program.list) prints [ "/path/to/default" ]
$ index.js run some
// where console.log(program.list) prints [ "/path/to/default" ]