Optionator, Commander均可用于为Node命令行工具(CLI)生成帮助库。

源码:https://github.com/cuizhirong...

Optionator

Optionator是一个JavaScript选项解析和帮助生成库。

npm install optionator

require('optionator')返回一个function,一个VERSION参数(optionator的版本)。
function接收一个对象参数,参数中包含配置信息。function的执行结果返回一个对象。

  var optionator = require('optionator')({
    prepend: 'Usage: cmd [options]',
    append: 'Version 1.0.1',
    options: [{
      option: 'help',
      alias: 'h',
      type: 'Boolean',
      description: 'displays help'
    }, {
      option: 'count',
      alias: 'c',
      type: 'Int',
      description: 'number of things',
      longDescription: 'text longDescription',
      example: 'cmd --count 2'
    }]
  });
  const options = optionator.parseArgv(process.argv);

  if (options.help) {
    console.log(optionator.generateHelp());
  }

clipboard.png

parse(input, parseOptions)
根据settings处理输入,并返回包含结果的对象。

参数:
input-想要解析的内容
parseOptions-Int型,表示input是数组还是字符串,默认0是字符串,2是数组

returns:解析后的对象

parseArgv(input)
parseArgv和parse相似,但是parseArgv只接收数组,切掉前两个元素。

  parseArgv(process.argv)

clipboard.png

generateHelp(helpOptions(可选))
根据settings生成帮助文本

参数:
helpOptions{showHidden: Boolean, interpolate: Object}
showHidden: 是否显示hidden的option
interpolate: 指定数据去覆盖prependappend文本

//将改变append的文本内容:Version {{version}} 改为 Version 0.4.2
generateHelp({interpolate: {version: '0.4.2'}}) 

return: String-生成的帮助文本

clipboard.png

generateHelpForOption(optionName)
为指定的optionName生成拓展的帮助文本。如果option有example,则会显示这个example。如果指定了longDescription,它将显示longDescription而不显示Description。

generateHelpForOption('count');

clipboard.png

Settings格式

  • prepend: 是在帮助文本中放置在options之前的可选字符串。
  • append: 是在帮助文本中放置在options之前的可选字符串。
  • options: 配置信息的数组
  • helpStyle: 对象,改变一些默认样式

Options格式

  • option(必须) 名字
  • alias(可选) 缩写
  • type(必须) 类型,被用作验证输入值
  • description(可选) 介绍
  • example(可选) option的例子-当generateHelpForOption被调用的时候才会打印
  • required(可选) 设置为true时,如果没有定义这个参数打印将会失败

Commander

提供了用户命令行输入和参数解析的强大功能。

npm install commander --save
#! /usr/bin/env node

var program = require('commander');

program
  .version('0.0.1')
  .option('-p, --pepprs', 'Add peppers', function() { console.log('-p, --pepprs callback'); })
  .option('-b, --bbq-sauce', 'Add bbq sauce')
  .option('-c | --control-thing', 'Add ct')
  .parse(process.argv);

if (program.controlThing) console.log('  - cttt');
OptionsCommander中通过.option()定义。例子中解析了来自process.argv的参数和options(--help默认添加)

clipboard.png

option()接收四个参数;

第一个参数是option名称,'short option, long option' 或者写成 'short option | long option'; long option中多个单词组成的,比如--template-engine将被解析成驼峰式命名templateEngine; 在short/long option之后还可以指定参数(<required>必填参数, [db]可选参数)
clipboard.png

第二个参数是option的描述;
第三个参数是回调函数;
第四个参数是回调函数默认值。

clipboard.png

对于未定义的option,程序会抛出错误,如下图的第一条命令; Commander的解决方法是提供方法.allowUnknownOption(), 直接退出取消这个自动报错机制, 如下图的第二条命令。

clipboard.png

Command-特殊的options
program
  .command('rm <dir>')
  .option('-r, --recursive <cmd>', 'Remove recursively')
  .action(function (dir, cmd) {
    console.log('dir ' + dir + ' cmd ' + cmd);
  });

.outputHelp(cb) .help(cb)用于打印帮助信息


ZM_CZR
18 声望0 粉丝