Commander.js 在没有命令的情况下调用时显示帮助

Posted

技术标签:

【中文标题】Commander.js 在没有命令的情况下调用时显示帮助【英文标题】:Commander.js display help when called with no commands 【发布时间】:2017-11-04 07:42:33 【问题描述】:

我正在使用commander.js 编写一个与 API 交互的简单 node.js 程序。所有调用都需要使用子命令。例如:

apicommand get

如下调用:

program
  .version('1.0.0')
  .command('get [accountId]')
  .description('retrieves account info for the specified account')
  .option('-v, --verbose', 'display extended logging information')
  .action(getAccount);

我现在要做的是在没有任何子命令的情况下调用 apicommand 时显示默认消息。就像您在没有子命令的情况下调用 git 时一样:

MacBook-Air:Desktop username$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
       [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
       [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
       [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
       <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one
...

【问题讨论】:

检查process.argv,它是一个包含参数的数组。 【参考方案1】:

我现在要做的是在没有任何子命令的情况下调用 apicommand 时显示默认消息。就像在没有子命令的情况下调用 git 一样

如果您在没有子命令的情况下调用,则从 Commander 5 开始会自动显示帮助。

(披露:我是Commander的维护者。)

【讨论】:

我们如何禁用自动帮助?【参考方案2】:

当您尝试传递命令时,它会将命令存储在 process.argv 数组中。

您可以在代码末尾添加一个条件,例如 -:

if(process.argv.length  <= 2)
console.log(program.help());
else 
program.parse();

【讨论】:

【参考方案3】:

您可以通过检查收到的参数来执行此类操作,如果除了node&lt;app&gt;.js 之外没有其他内容,则显示帮助文本。

program
  .version('1.0.0')
  .command('get [accountId]')
  .description('retrieves account info for the specified account')
  .option('-v, --verbose', 'display extended logging information')
  .action(getAccount)
  .parse(process.argv)

if (process.argv.length < 3) 
  program.help()

【讨论】:

以上是关于Commander.js 在没有命令的情况下调用时显示帮助的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在没有模式名称的情况下调用用户定义的函数?

如何在不知道 sort(XS) 是如何实现的情况下调和这个问题

为啥切片函数在不明确使用 dplyr 的情况下不起作用

Node交互式命令行工具开发——自动化文档工具

如何在不重新加载表格的情况下调整表格单元格内的标签大小?

ByRef 参数类型与布尔值不匹配