【问题标题】:NodeJS, Commander - How to identify if user has passed un-supported optionNodeJS,Commander - 如何识别用户是否通过了不受支持的选项
【发布时间】:2020-06-20 15:41:56
【问题描述】:

我正在查看指挥官 npm 包提供的所有自定义,它真的很好,但我想知道是否有任何方法可以找到用户是否提供了不受支持的选项。

对于不支持的命令,我们可以写:(但不确定不支持的选项)

const commander = require('commander');

this.applicationCommander = new commander.Command();

this.applicationCommander.command('*').action(this.applicationCommander.help);

【问题讨论】:

  • 然而,CLI 工具的通用行为是在 --help 和未传递参数时触发此操作,并简单地忽略未知参数。您不会在不受支持的标志上显示帮助打印输出:它们不受支持,您的 CLI 工具已经对它们没有任何作用,因此就执行而言没有错误,并且 CLI 工具应该只使用它的 args 运行知道。
  • 同意,但如果选项无效,我想显示帮助菜单。只有我想显示--help 的输出 :) 进行各种自定义总是好的(至少我相信这一点)。
  • 这样做的问题是人们希望您的 CLI 工具能够生成真正的 stdout 文本。在不受支持的标志上显示帮助,而不是做它应该做的,意味着它不能与其他 CLI 实用程序链接。所以......真的,你不应该想要,你应该效仿其他人树立的榜样。你的 man page/--help 输出已经足够有用了,人们会阅读它来看看他们能做什么。
  • 同意,并且有道理(将做出改变),但将保持问题的开放性以寻找可能的方式。
  • 你可以随时问他们。这是一个开源包,没有什么能阻止你为它提交问题。

标签: node.js node-commander


【解决方案1】:

Commander 默认会在主命令上显示未知选项的错误:

const program = require('commander');
program.parse(process.argv);
$ node index.js --silly
error: unknown option '--silly'

Commander v4 README 中包含子命令的相关信息是:

在使用命令时,会验证命令行上的命令选项。任何未知选项都将报告为错误。但是,如果基于操作的命令未定义操作,则不会验证选项。

如果您想自己进行额外处理而不是在遇到未知选项时退出,请查看.exitOverride()。例如:

const commander = require('commander');
const program = new commander.Command();
program.exitOverride(); // throw instead of exit

try {
  program.parse(process.argv);
} catch (err) {
  if (err.code === 'commander.unknownOption') {
    console.log();
    program.outputHelp();
  }
}
$ node index.js --silly
error: unknown option '--silly'

Usage: index [options]

Options:
  -h, --help  output usage information

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多