Commander

原文:https://www.npmjs.com/package/commandernode

Commander.js

Installation

npm install commander --save

Option 語法解析(parsing)

咱們使用.option()定義Options,其中--後面的做爲commander變量名
option做爲定義命令的選項,不能夠單獨使用 必須跟在命令後面git

#!/usr/bin/env node
 
/**
 * Module dependencies.
 */
 
var program = require('commander');
 
program
  .version('0.1.0')
  .option('-p, --peppers', 'Add peppers')
  .option('-P, --pineapple', 'Add pineapple')
  .option('-b, --bbq-sauce', 'Add bbq sauce')
  .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
  .parse(process.argv);
 
console.log('you ordered a pizza with:');
if (program.peppers) console.log('  - peppers');
if (program.pineapple) console.log('  - pineapple');
if (program.bbqSauce) console.log('  - bbq');
console.log('  - %s cheese', program.cheese);

短參數能夠做爲單個參數傳遞,好比 -abc類似於(is equivalent to)-a -b -c,兩個橫線的選項常常被用做變量名,以--no開頭的雙劃線選項一般表示否認的意思express

#!/usr/bin/env node
 
/**
 * Module dependencies.
 */
 
var program = require('commander');
 
program
  .option('--no-sauce', 'Remove sauce')
  .parse(process.argv);
 
console.log('you ordered a pizza');
if (program.sauce) console.log('  with sauce');
else console.log(' without sauce');

Version option

當咱們但願獲取版本的時候,一般使用-V或者--version,當這兩種(either of these)選項出現時,會打印出版本號npm

$ ./examples/pizza -V
0.0.1

若是你想用戶輸入小寫的v也能輸出版本號時,只須要在options選項裏將大寫V改爲小寫的v
短標誌你能夠隨便寫,可是--version必須是固定的app

command命令

你能夠將option依附在command上測試

#!/usr/bin/env node
 
var program = require('commander');
 
program
  .command('rm <dir>')
  .option('-r, --recursive', 'Remove recursively')
  .action(function (dir, cmd) {
    console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''))
  })
 
program.parse(process.argv)

當該command被運行的時候,能夠驗證option,任何未知的命令都將報錯,可是,若是command命令上並無定義action,option就不會被驗證,天然也不會報錯ui

強制處理(Coercion)

咱們有時候但願對用戶輸入的信息作二次處理,以便更好的規範化數據this

function list(val) {
  return val.split(',');
}
 
 
program
  .version('0.1.0')
  .usage('[options] <file ...>')
  .option('-i, --integer <n>', 'An integer argument', parseInt)
  .option('-l, --list <items>', 'A list', list)
  .parse(process.argv);
 
console.log(' int: %j', program.integer);
console.log(' list: %j', program.list);

Regular Expression

program
  .version('0.1.0')
  .option('-s --size <size>', 'Pizza size', /^(large|medium|small)$/i, 'medium')
  .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i)
  .parse(process.argv);
 
console.log(' size: %j', program.size);
console.log(' drink: %j', program.drink);

Variadic arguments

命令的最後一個參數能夠是可變參數,而且只能是最後一個參數。要使參數可變,你必須附加。到參數名。下面是一個例子:code

#!/usr/bin/env node
 
/**
 * Module dependencies.
 */
 
var program = require('commander');
 
program
  .version('0.1.0')
  .command('rmdir <dir> [otherDirs...]')
  .action(function (dir, otherDirs) {
    console.log('rmdir %s', dir);
    if (otherDirs) {
      otherDirs.forEach(function (oDir) {
        console.log('rmdir %s', oDir);
      });
    }
  });
 
program.parse(process.argv);

指定參數語法

#!/usr/bin/env node
 
var program = require('commander');
 
program
  .version('0.1.0')
  .arguments('<cmd> [env]')
  .action(function (cmd, env) {
     cmdValue = cmd;
     envValue = env;
  });
 
program.parse(process.argv);
 
if (typeof cmdValue === 'undefined') {
   console.error('no command given!');
   process.exit(1);
}
console.log('command:', cmdValue);
console.log('environment:', envValue || "no environment given");

<>表示必須輸入,[]表示可選輸入orm

Git-style風格命令

// file: ./examples/pm
var program = require('commander');
 
program
  .version('0.1.0')
  .command('install [name]', 'install one or more packages')
  .command('search [query]', 'search with optional query')
  .command('list', 'list packages installed', {isDefault: true})
  .parse(process.argv);

當使用.command()的時候,若是使用了描述參數,那麼就不能使用action命令,不然會報錯,這告訴commander你將要使用分離的(separate)可執行文件(executables)來執行命令,commander 將試圖尋找和你在command裏面聲明的命令相似的文件夾,可使用Options 選項,Options 也能夠在.command()中使用,若是指定opts.noHelp是true,將從對應的command命令中移除help信息,若是指定opts.isDefault爲true,若是沒有指定其餘子命令,isDefault將運行子命令。若是你的程序被設置爲全局安裝,請確保你的可執行文件的權限正當.

--harmony

你有兩種方式啓用harmony
1:在你的可執行文件最上面使用#! /usr/bin/env node --harmony
2:當使用命令的時候 加上--harmony

設置幫助信息

commander 會根據一些已有信息去自動生成幫助信息

自定義幫助信息

你能夠顯示任何幫助信息經過監聽--help,Commander 將自動退出程序的剩餘部分當你使用--help的時候,這樣就不會一塊兒其餘問題了
#!/usr/bin/env node
 
/**
 * Module dependencies.
 */
 
var program = require('commander');
 
program
  .version('0.1.0')
  .option('-f, --foo', 'enable some foo')
  .option('-b, --bar', 'enable some bar')
  .option('-B, --baz', 'enable some baz');
 
// must be before .parse() since
// node's emit() is immediate
 
program.on('--help', function(){
  console.log('')
  console.log('Examples:');
  console.log('  $ custom-help --help');
  console.log('  $ custom-help -h');
});
 
program.parse(process.argv);
 
console.log('stuff');

如何你想測試你的幫助信息設置,只須要運行node 你的可執行文件名稱.js --help:

Usage: custom-help [options]

Options:
  -h, --help     output usage information
  -V, --version  output the version number
  -f, --foo      enable some foo
  -b, --bar      enable some bar
  -B, --baz      enable some baz

Examples:
  $ custom-help --help
  $ custom-help -h

自定義事件監聽(Custom event listeners)

你能夠經過監聽commond或者option來完成自定義事件

program.on('option:verbose', function () {
  process.env.VERBOSE = this.verbose;
});
 
// error on unknown commands
program.on('command:*', function () {
  console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
  process.exit(1);
});
相關文章
相關標籤/搜索