避免命令解析器在没有参数时抱怨,只显示 helpInfo

Avoid commander parser complaining when no arguments are present and just show helpInfo

我正在从更旧版本的 commander (v2.20.3) 迁移一个包

program.command(`install [pkg]`)
  .alias(`i`)
  .action(installPackageOrLocal)
  .option(`-S, --save`, `Save to dependencies`)
  .option(`-D, --save-dev`, `Save to devDependencies`)
  .option(`--production`, `Will not install modules listed in devDependencies`)
  .option(`--test`, `Exit with code 1 if package limits like maxPackagesNumber or maxSizeBites exceeded`);

我希望默认设置(当调用 CLI 时不带任何参数)继续显示帮助并且不会出错,但目前它出错了:

.../npm-reflect/node_modules/.pnpm/commander@8.3.0/node_modules/commander/lib/command.js:142 const [, name, args] = nameAndArgs.match(/([^ ]+) (.)/);

我能够通过添加获得最想要的行为:

program.command('help', {isDefault: true})
  .action(() => {
    program.help();
  })
  .command(`install [pkg]`)
  // ...

...但这似乎通过列出一个新的“帮助”命令来污染帮助中的内容。在不添加新命令的情况下如何避免解析器在没有参数时抱怨?

  1. 如果您有子命令但未指定子命令,最新 Commander 中的默认行为是显示帮助。这听起来像你想要的!不确定您是如何收到错误的,您可能需要打开 Commander issue 寻求帮助。

  2. 一般来说,如果您想要一些不带参数的自定义行为,那么在调用 parse() 之前检查您自己可能简单易行。例如

if (process.argv.length < 3)
  program.help(); // exits
program.parse(process.argv);