使用yargs编写子命令时无法接收传入参数、仅加载默认值问题
你定义的date/start/end都是带别名的选项参数,需要指定参数名前缀才能被yargs识别,你当前运行命令时直接传入的日期值会被判定为匿名位置参数,只会存入argv._数组,不会匹配到你定义的选项字段上,所以只会显示默认值。
方案1:保持现有配置,调整命令传参格式
运行命令时加上选项前缀即可,两种写法都可以:
- 全写参数名:
node src/main.js my-command --date 2021-01-01 --start 2021-01-01 --end 2021-12-31 - 用别名缩写:
node src/main.js my-command -d 2021-01-01 -s 2021-01-01 -e 2021-12-31
方案2:修改命令配置,支持无前缀的位置参数
如果要保留你现在直接传日期的调用方式,只需修改command.cmd.js里的command字段,按顺序声明位置参数即可:
module.exports = { // 按你要接收的位置参数顺序,把对应选项名写在方括号里 command: 'my-command [date] [start] [end]', desc: `Does something`, builder: { date: { type: 'string', alias: 'd', default: '' }, start: { type: 'string', alias: 's', default: '' }, end: { type: 'string', alias: 'e', default: '' }, }, async handler(argv) { console.log(require('util').inspect(argv, { depth: null })); // 后续业务逻辑 } }
修改后你原来的调用方式就可以正常把传入的日期值赋值到对应date/start/end字段。
内容的提问来源于stack exchange,提问作者JacobM
相关产品推荐
相关产品推荐

