如何解决yargs 不接收任何参数
我正在尝试使用 yargs 编写一个子命令,该子命令接受一个参数,并严格按照文档进行操作。但是,该命令本身的行为就像它不接收任何参数一样,而只是使用默认值。
main.js:
require('yargs')()
.commandDir(path.join(core.ROOT,'cmds'),{ extensions: ['cmd.js'],recurse: true })
.wrap(null)
.help()
.alias('help','h')
.version(false)
.parse();
command.cmd.js:
module.exports = {
command: 'my-command',desc: `Does something`,builder: {
date: { type: 'string',alias: 'd',default: '' },start: { type: 'string',alias: 's',end: { type: 'string',alias: 'e',},async handler(argv) {
console.log(require('util').inspect(argv,{ depth: null }));
...
}
argv
的输出是:
_: [ 'my-command','2021-01-01','2021-12-31' ],env: 'dev',date: '',d: '',start: '',s: '',end: '',e: '','$0': 'src/main.js'
}
解决方法
在您的代码中,您没有提供用户参数,
require('yargs')()
.parse();
您可能想要提供 process.argv.slice(2)
。像这样:
require('yargs')(process.argv.slice(2))
...
.parse();
虽然不确定您是如何验证 argv 的,但使用您提供的代码,它应该始终只提供:
{ _: [],'$0': 'some_string' }
所以也许您确实提供了参数,只是忘记在示例代码中显示它。
argv 输出将日期作为位置参数:
{ _: [ 'my-command','2021-01-01','2021-12-31' ],... }
您似乎正在尝试将这些位置参数作为 argv.start
和 argv.end
的值。但是您并没有告诉 yargs 如何解释位置参数。
它应该看起来像这样:
module.exports = {
command: 'my-command [start] [end]',desc: `Does something`,builder: y => {
return y.positional("start",{
type: "string",alias: "s",default: ""
});
},async handler(argv) {
console.log(require('util').inspect(argv,{ depth: null }));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。