gpt4 book ai didi

javascript - Commander.js 收集多个选项总是包括默认

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:22 24 4
gpt4 key购买 nike

我正在使用 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);

当我这样调用脚本时:

index.js run 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

IMO,此场景需要“A list” 选项,它支持默认值,并为您节省一些额外的工作。喜欢:

program
.option('-l, --list <items>', 'A list', list, [ "/path/to/default" ])
.parse(process.argv);

要访问传递的值,只需调用 program.list,然后在命令行中用值调用它:

$ index.js run some -l "/some/path","/other/path"
// where console.log(program.list) prints [ "/some/path", "/other/path" ]

或者,没有值:

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

关于javascript - Commander.js 收集多个选项总是包括默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com