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

Commander.js执行无选项命令时,如何显示该命令的全部可用选项?

在Commander.js中触发命令专属帮助信息的问题

当运行CLI但不指定任何命令时,默认输出如下全局帮助内容:

Options:
-h, --help display help for command

Commands:
foo [options] Foo
bar [options] Bar
help [command] display help for command

但执行app foo这类仅指定命令却未传递任何选项的操作时,希望能显示foo命令自身的所有可用选项,而非全局帮助。

当前代码示例

const foo = () => {
  program
    .command('foo')
    .description('This is a foo')
    .option('-a, --alpha [string]', 'Show Alpha', false)
    .option('-b, --beta [string]', 'Show Beta', false)
    .action(async options => {
      clear()
      try {
        const { alpha, beta } = options
        if (alpha === false && beta === false) return program.help()
      } catch (e) {
        console.log(chalk.red('Error: '), chalk.white(e.message))
        return process.exit(1)
      }
    })
}

export default foo

目前使用program.help()只会输出全局帮助,无法展示foo命令的专属选项。

解决方法

问题核心是调用了全局的program.help(),而非当前命令实例的帮助方法。只需获取foo命令对应的实例,调用它的help()即可,有两种实现方式:

  1. 保存命令实例直接调用
const foo = () => {
  // 保存当前命令的实例
  const fooCommand = program
    .command('foo')
    .description('This is a foo')
    .option('-a, --alpha [string]', 'Show Alpha', false)
    .option('-b, --beta [string]', 'Show Beta', false)
    .action(async options => {
      clear()
      try {
        const { alpha, beta } = options
        if (alpha === false && beta === false) {
          // 调用当前命令的help方法
          return fooCommand.help()
        }
      } catch (e) {
        console.log(chalk.red('Error: '), chalk.white(e.message))
        return process.exit(1)
      }
    })
}

export default foo
  1. 通过action回调的第二个参数获取命令实例
    Commander.js的action回调函数第二个参数就是当前命令的实例,可直接使用:
const foo = () => {
  program
    .command('foo')
    .description('This is a foo')
    .option('-a, --alpha [string]', 'Show Alpha', false)
    .option('-b, --beta [string]', 'Show Beta', false)
    // 新增command参数接收当前命令实例
    .action(async (options, command) => {
      clear()
      try {
        const { alpha, beta } = options
        if (alpha === false && beta === false) {
          // 调用当前命令的help方法
          return command.help()
        }
      } catch (e) {
        console.log(chalk.red('Error: '), chalk.white(e.message))
        return process.exit(1)
      }
    })
}

export default foo

修改后执行app foo,会输出foo命令的专属帮助信息:

Options:
-a, --alpha [string] Show Alpha
-b, --beta [string] Show Beta
-h, --help display help for command

内容的提问来源于Stack Exchange,提问作者GʀᴜᴍᴘʏCᴀᴛ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:03:20