обязательные аргументы с commander-js - PullRequest
0 голосов
/ 04 июня 2019

Мне было интересно, возможно ли создать команду на commander , которая выглядит следующим образом

toggle (on|off) <args...>

Где (on|off) означает, что вы должны выбрать один или другой, обязательно.

В идеале командир должен позаботиться о выдаче соответствующего сообщения об ошибке и ошибке.

1 Ответ

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

Как сказал @shadowspawn, командир не поддерживает такую ​​конструкцию. Однако вы можете смоделировать его, взяв обязательный параметр в качестве аргумента и сделав проверку самостоятельно. Затем вы можете переопределить вывод справки, используя метод использования. Что-то вроде этого.

const assertOnOff = (str) => {
  if (!/^(on|off)$/.test(str)) {
    Logger.error('Toggle action must be either `on` or `off`');
    process.exit(1);
  }
};

const expandJson = str => JSON.stringify(JSON.parse(str), null, 2);

async function start(action, features) {
  assertOnOff(action);
  // ... do things
}


program.command('toggle <action> <FEATURE_NAME...>')
  .description('turns a feature on or off')
  .usage('(on|off) <FEATURE_NAME...>')
  .action(start);

Тогда, когда вы вызываете команду, как это

toggle -h

Вы получите этот вывод справки

Usage: toggle (on|off) <FEATURE_NAME...>

turns a feature on or off

Options:
  -i, --institution [name]  Institution name
  -h, --help                output usage information
...