CommanderJS - проверить аргумент - PullRequest
2 голосов
/ 03 июня 2019

Учитывая следующую конфигурацию cli, мы можем проверить переданные аргументы, просто поместив обязательный элемент управления в обработчик действия ...

#!/usr/bin/env node

var program = require('commander');

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

program.parse(process.argv)

Однако мне было интересно, есть ли на самом деле apis для этого:

program.command('greet <Giuseppe|Mick|Bob>');

Чтобы commanderjs автоматически выдавал, если аргументы неверны.

1 Ответ

1 голос
/ 03 июня 2019

Философия для 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.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);

Надеюсь, это поможет!

...