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

如何在未选择命令时创建yargs默认响应

解决Yargs CLI未输入/输入无效命令时显示欢迎信息的问题

核心思路

Yargs默认在无命令或命令不存在时会输出内置帮助信息,要替换成自定义的欢迎/提示内容,需要结合strict、demandCommand或默认命令$0,配合fail方法实现精准场景捕获。

具体实现方案

方案1:统一处理两种场景(无命令+无效命令)

通过fail方法一次性捕获两种情况,逻辑更集中:

const yargs = require('yargs');
const { hideBin } = require('yargs/helpers');

// 定义你的嵌套命令
yargs(hideBin(process.argv))
  .command('create [type]', '创建资源', (yargs) => {
    yargs.command('project', '创建项目', () => {
      console.log('创建项目中...');
    })
    .command('file', '创建文件', () => {
      console.log('创建文件中...');
    });
  })
  .command('delete <id>', '删除资源', () => {
    console.log('删除资源中...');
  })
  // 开启严格模式,捕获不存在的命令
  .strict()
  // 要求至少输入1个命令,触发无命令时的错误
  .demandCommand(1)
  // 自定义错误处理逻辑
  .fail((msg, err, yargs) => {
    // 判断错误类型,输出对应提示
    if (msg.includes('Missing required command')) {
      console.log('=== 欢迎使用我的CLI工具 ===');
      console.log('可用命令:');
      console.log('- create project: 创建项目');
      console.log('- create file: 创建文件');
      console.log('- delete <id>: 删除资源');
      console.log('\n输入 `your-cli --help` 查看详细帮助');
    } else if (msg.includes('Unknown command')) {
      console.log(`❌ 未知命令:${process.argv.slice(2).join(' ')}`);
      console.log('=== 可用命令 ===');
      console.log('- create project: 创建项目');
      console.log('- create file: 创建文件');
      console.log('- delete <id>: 删除资源');
      console.log('\n输入 `your-cli --help` 查看详细帮助');
    } else {
      // 其他错误输出原信息并退出
      console.error(msg);
      process.exit(1);
    }
  })
  .help()
  .argv;

方案2:拆分场景处理(默认命令+strict捕获)

用$0默认命令单独处理无命令场景,strict配合fail处理无效命令:

const yargs = require('yargs');
const { hideBin } = require('yargs/helpers');

yargs(hideBin(process.argv))
  // 默认命令:用户未输入任何命令时触发
  .command('$0', '欢迎信息', () => {
    console.log('=== 欢迎使用我的CLI工具 ===');
    console.log('可用命令:');
    console.log('- create project: 创建项目');
    console.log('- create file: 创建文件');
    console.log('- delete <id>: 删除资源');
    console.log('\n输入 `your-cli --help` 查看详细帮助');
  })
  // 定义嵌套命令
  .command('create [type]', '创建资源', (yargs) => {
    yargs.command('project', '创建项目', () => {
      console.log('创建项目中...');
    })
    .command('file', '创建文件', () => {
      console.log('创建文件中...');
    });
  })
  .command('delete <id>', '删除资源', () => {
    console.log('删除资源中...');
  })
  // 开启严格模式,捕获无效命令
  .strict()
  // 处理无效命令的错误
  .fail((msg, err, yargs) => {
    if (msg.includes('Unknown command')) {
      console.log(`❌ 未知命令:${process.argv.slice(2).join(' ')}`);
      console.log('=== 可用命令 ===');
      console.log('- create project: 创建项目');
      console.log('- create file: 创建文件');
      console.log('- delete <id>: 删除资源');
      console.log('\n输入 `your-cli --help` 查看详细帮助');
    } else {
      console.error(msg);
      process.exit(1);
    }
  })
  .help()
  .argv;

关键说明

  • strict():开启后Yargs会对不存在的命令抛出错误,方便我们捕获处理。
  • demandCommand(1):强制要求用户输入至少1个命令,否则触发错误进入fail逻辑。
  • fail():自定义错误处理入口,根据错误信息判断当前场景,输出对应提示。
  • $0命令:Yargs的默认命令标识符,当用户未输入任何子命令时自动触发该命令的处理函数。

内容的提问来源于stack exchange,提问作者APW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:01:17