如何在 yargs 中构建众多命令之一?

How to structure one of many commands in yargs?

我已多次阅读 yargs 文档,但无法理解这一点。这是我的要求:

这是我的尝试:

async function main() {
  await yargs(process.argv.slice(2))
    .command('cmd1', 'Command 1', {}, () => console.log('Executing command1'))
    .command('cmd2', 'Command 2', {}, () => console.log('Executing command2'))
    .help().argv;
}

以下命令按预期工作:

my-cli cmd1   # prints "Executing command1"
my-cli cmd2   # prints "Executing command2"

但是以下命令静默退出:

my-cli
my-cli cmd3

我错过了什么?

根据文档和OP的提炼,正确的yarg处理未定义参数的代码如下:

async function main() {
  await yargs(process.argv.slice(2))
    .command('cmd1', 'Command 1', {}, () => console.log('Executing command1'))
    .command('cmd2', 'Command 2', {}, () => console.log('Executing command2'))
    .strictCommands()
    .demandCommand()
    .help().argv;
}
  • strictCommands():只接受已定义的命令(即不接受未定义的命令,如cmd3Documentation

  • demandCommand():接受最少 1 个参数(即不接受没有参数的命令); 1为默认最小值;也可以通过 demandCommand(1, 1) Documentation

    添加 max 选项来约束恰好 1 个参数