CommanderJS - 验证参数

Hit*_*nds 5 javascript command-line-interface node.js

给定以下cli配置,我们可以通过简单地将命令式控件放入操作处理程序中来验证传递的参数......

#!/usr/bin/env node

var program = require('commander');

program
  .command('greet <person>')
  .action((person, cmd) => {
    console.log(`Hello ${person}`);
  })

program.parse(process.argv)
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有实际的 api 可以这样做:

program.command('greet <Giuseppe|Mick|Bob>');
Run Code Online (Sandbox Code Playgroud)

因此,commanderjs如果参数不正确,就会自动抛出异常。

Sto*_*law 0

参数的哲学command是它们可以是任何东西,因此必须在action.

如果您想要一组有限的选项,您可能需要使用option.

一般处理这种情况的解决方法是使用git 样式的子命令

#!/usr/bin/env node
// main entry point for the program, let's call it mycmd

const program = require('commander');

program.command('greet', 'greets someone');

program.parse(process.argv);
Run Code Online (Sandbox Code Playgroud)

然后有greet命令文件:

#!/usr/bin/env node
// entry point for `greet` subcommand, named mycmd-greet

const program = require('commander');

// declare all available cases
// (you could also obviously reuse the same function as the action callback)
program
.command('giuseppe')
.action(() => {
  console.log("Hi Giu!");
});
program
.command('mick')
.action(() => {
  console.log("Hey Micky!");
});
program
.command('bob')
.action(() => {
  console.log("That's my Bobby!");
});

// handle `greet` failures here in one shot
program
.command('*')
.action((x) => {
  console.log(`Sorry, I don't know no ${x}.`);
});

program.parse(process.argv);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!