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);