nodejs命令行参数处理模块commander使用实例
诚然,之前处理都是使用内置的process.agrv,这个能work,但是不好使,于是tj大神给写了一个,mygod,完全的高大上:
1、安装
npminstallcommander
2、option解析
Optionswithcommanderaredefinedwiththe.option()method,alsoservingasdocumentationfortheoptions.Theexamplebelowparsesargsandoptionsfromprocess.argv,leavingremainingargsastheprogram.argsarraywhichwerenotconsumedbyoptions.
#!/usr/bin/envnode
/**
*Moduledependencies.
*/
varprogram=require('commander');
program
.version('0.0.1')
.option('-p,--peppers','Addpeppers')
.option('-P,--pineapple','Addpineapple')
.option('-b,--bbq','Addbbqsauce')
.option('-c,--cheese[type]','Addthespecifiedtypeofcheese[marble]','marble')
.parse(process.argv);
console.log('youorderedapizzawith:');
if(program.peppers)console.log(' -peppers');
if(program.pineapple)console.log(' -pineapple');
if(program.bbq)console.log(' -bbq');
console.log(' -%scheese',program.cheese);
Shortflagsmaybepassedasasinglearg,forexample-abcisequivalentto-a-b-c.Multi-wordoptionssuchas“–template-engine”arecamel-cased,becomingprogram.templateEngineetc.
3、自动生成help信息
$./examples/pizza--help Usage:pizza[options] Options: -V,--version outputtheversionnumber -p,--peppers Addpeppers -P,--pineapple Addpineapple -b,--bbq Addbbqsauce -c,--cheese<type> Addthespecifiedtypeofcheese[marble] -h,--help outputusageinformation
当然你也可以手动生成:
#!/usr/bin/envnode
/**
*Moduledependencies.
*/
varprogram=require('../');
functionlist(val){
returnval.split(',').map(Number);
}
program
.version('0.0.1')
.option('-f,--foo','enablesomefoo')
.option('-b,--bar','enablesomebar')
.option('-B,--baz','enablesomebaz');
//mustbebefore.parse()since
//node'semit()isimmediate
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、举个完整的例子
functionrange(val){
returnval.split('..').map(Number);
}
functionlist(val){
returnval.split(',');
}
functioncollect(val,memo){
memo.push(val);
returnmemo;
}
functionincreaseVerbosity(v,total){
returntotal+1;
}
program
.version('0.0.1')
.usage('[options]<file...>')
.option('-i,--integer<n>','Anintegerargument',parseInt)
.option('-f,--float<n>','Afloatargument',parseFloat)
.option('-r,--range<a>..<b>','Arange',range)
.option('-l,--list<items>','Alist',list)
.option('-o,--optional[value]','Anoptionalvalue')
.option('-c,--collect[value]','Arepeatablevalue',collect,[])
.option('-v,--verbose','Avaluethatcanbeincreased',increaseVerbosity,0)
.parse(process.argv);
console.log('int:%j',program.integer);
console.log('float:%j',program.float);
console.log('optional:%j',program.optional);
program.range=program.range||[];
console.log('range:%j..%j',program.range[0],program.range[1]);
console.log('list:%j',program.list);
console.log('collect:%j',program.collect);
console.log('verbosity:%j',program.verbose);
console.log('args:%j',program.args);