Учитывая следующую конфигурацию cli, мы можем проверить переданные аргументы, просто поместив императивный элемент управления в обработчик действия...
#!/usr/bin/env node
var program = require('commander');
program
.command('greet <person>')
.action((person, cmd) => {
console.info(`Hello ${person}`);
})
program.parse(process.argv)
Однако мне было интересно, есть ли для этого настоящие API:
program.command('greet <Giuseppe|Mick|Bob>');
Чтобы commanderjs автоматически бросал вызов, если аргументы неверны.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Философия аргументов 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);
Затем получите командный файл 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.info("Hi Giu!");
});
program
.command('mick')
.action(() => {
console.info("Hey Micky!");
});
program
.command('bob')
.action(() => {
console.info("That's my Bobby!");
});
// handle `greet` failures here in one shot
program
.command('*')
.action((x) => {
console.info(`Sorry, I don't know no ${x}.`);
});
program.parse(process.argv);
Надеюсь это поможет!