誠然,之前處理都是使用內建的process.agrv ,這個能work,但是不好使,於是tj大神給寫了一個,my god,完全的高大上:
1、安裝
npm install commander
2、option 解析
Options with commander are defined with the .option() method, also serving as documentation for the options. The example below parses args and options from process.argv, leaving remaining args as the programn. options.
#!/usr/bin/env node
/**
* 模組依賴。
*/
var program = require('commander');
program
.version('0.0.1')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
.option('-b, --bbq', '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.bbq) console.log(' - bbq');
console.log(' - %s cheese', program.cheese);
Short flags may be passed as a single arg, for example -abc is equivalent to -a -b -c. Multi-word options such as “–template-engine” are camel-cased, becoming programc.templateEngine etc.
3、自動產生help資訊
$ ./examples/pizza --help
Usage: pizza [options]
Options:
-V, --version output the version number
-p, --peppers Add peppers
-P, --pineapple Add pineapple
-b, --bbq Add bbq sauce
-c, --cheese Add the specified type of cheese [marble]
-h, --help output usage information
當然你也可以手動產生:
#!/usr/bin/env node
/**
* 模組依賴。
*/
var program = require('../');
function list(val) {
return val.split(',').map(Number);
}
program
.version('0.0.1')
.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(' Examples:');
console.log('');
console.log(' $ custom-help --help');
console.log(' $ custom-help -h');
console.log('');
});
program.parse(process.argv);
console.log('stuff');
4、舉個完整的例子
函數範圍(val) {
return val.split('..').map(Number);
}
函數列表(val) {
return val.split(',');
}
函數collect(val, memo) {
memo.push(val);
回備忘錄;
}
函數增加詳細程度(v,總計){
回傳總計 1;
}
節目
.version('0.0.1')
.usage('[選項] ')
.option('-i, --integer
', '整數參數', parseInt)
.option('-f, --float ', '浮點參數', parseFloat)
.option('-r, --range ..', 'A 範圍', range)
.option('-l, --list ', 'A list', list)
.option('-o, --可選 [值]', '可選值')
.option('-c, --collect [value]', '可重複的值',collect,[])
.option('-v, --verbose', '可以增加的值',increaseVerbosity, 0)
.parse(process.argv);
console.log('int: %j',program.integer);
console.log('float: %j',program.float);
console.log('可選: %j', 程序.可選);
程序.範圍 = 程序.範圍 || [];
console.log('範圍: %j..%j',program.range[0],program.range[1]);
console.log('列表: %j', 程序.list);
console.log('collect: %j',program.collect);
console.log('詳細程度:%j',program.verbose);
console.log('args: %j',program.args);