admin管理员组文章数量:1291307
I'm using mander.js to parse the mand line args and I'm trying to collect an optional param that can appear multiple times and it always returns the options I set plus the default one.
function collect (val, memo) {
memo.push(val);
return memo;
}
program
mand('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);
When I call the script like this:
index.js run some -c "/some/path" -c "/other/path"
It prints:
[ '/path/to/default', '/some/path', '/other/path' ]
But it should only print:
['/some/path', '/other/path' ]`
When I call it without the -c
param it works correctly, printing the array with the default value. How can I fix this?
I'm using mander.js to parse the mand line args and I'm trying to collect an optional param that can appear multiple times and it always returns the options I set plus the default one.
function collect (val, memo) {
memo.push(val);
return memo;
}
program
.mand('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);
When I call the script like this:
index.js run some -c "/some/path" -c "/other/path"
It prints:
[ '/path/to/default', '/some/path', '/other/path' ]
But it should only print:
['/some/path', '/other/path' ]`
When I call it without the -c
param it works correctly, printing the array with the default value. How can I fix this?
2 Answers
Reset to default 6The mander
"Repeatable value" option doesn't support a default value, at least in a way that prevents you from having to write your own logic to handle the scenario where the user pass one or more values.
The way you wrote your code, you're gonna have to check the size of the program.config
attribute:
- If the user pass one or more
-c
option value, the size is> 1
; - Otherwise, it's
=== 1
.
IMO, this scenario calls for the "A list" option, which supports the default value, and saves you some extra work. Like:
program
.option('-l, --list <items>', 'A list', list, [ "/path/to/default" ])
.parse(process.argv);
To have access to the values passed, just call program.list
, and in the mand line, call it with values:
$ index.js run some -l "/some/path","/other/path"
// where console.log(program.list) prints [ "/some/path", "/other/path" ]
Or, without values:
$ index.js run some
// where console.log(program.list) prints [ "/path/to/default" ]
You could mark the array you pass as default option, then when collecting look for it.
function collectRepeatable(value, previous) {
if (previous._isDefault) {
return [value];
}
previous.push(value);
return previous;
}
function defaultRepeatable(array) {
array._isDefault = true;
return array;
}
//...
program
//...
.option('--exclude <file>', 'excludes files in input directory by file or pattern',
collectRepeatable, defaultRepeatable(['.gitignore', 'codeswing.json']))
//...
I created Replit space that includes full example: https://replit./@AgainPsychoX/testing-mander-repeatable-options
本文标签: javascriptCommanderjs collect multiple options always include defaultStack Overflow
版权声明:本文标题:javascript - Commander.js collect multiple options always include default - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741528363a2383605.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论