CLI生成幫助庫的工具

Optionator, Commander都可用於爲Node命令行工具(CLI)生成幫助庫。node

源碼:https://github.com/cuizhirong...git

Optionator

Optionator是一個JavaScript選項解析和幫助生成庫。github

npm install optionator

require('optionator')返回一個function,一個VERSION參數(optionator的版本)。
function接收一個對象參數,參數中包含配置信息。function的執行結果返回一個對象。npm

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是數組app

returns:解析後的對象函數

parseArgv(input)
parseArgv和parse類似,可是parseArgv只接收數組,切掉前兩個元素。工具

parseArgv(process.argv)

clipboard.png

generateHelp(helpOptions(可選))
根據settings生成幫助文本ui

參數:
helpOptions{showHidden: Boolean, interpolate: Object}
showHidden: 是否顯示hidden的option
interpolate: 指定數據去覆蓋prependappend文本spa

//將改變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)用於打印幫助信息

相關文章
相關標籤/搜索