首页 > 解决方案 > command-js 的强制参数

问题描述

我想知道是否可以在指挥官上创建一个看起来像这样的命令

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

Where(on|off)意味着您必须选择其中一个,强制性的。

理想情况下,指挥官应该注意抛出适当的错误和错误消息。

标签: javascriptnode.jscommand-line-interfacenode-commander

解决方案


正如@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

推荐阅读