0

我正在从更旧版本的指挥官 (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]`)
  // ...

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

4

1 回答 1

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

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

if (process.argv.length < 3)
  program.help(); // exits
program.parse(process.argv);
于 2022-01-24T05:08:02.457 回答