You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 15:54:03