Commander.js是Ruby中Commander在node.js中的实现.为commandline程序提供强大的参数解析能力.
如何使用
新建 nodecmd.js 文件,加入如下代码:
#!/usr/bin/env node var program = require('commander'); function range (val) { return val.split('..').map(Number); } function list (val) { return val.split(',') } //定义参数,以及参数内容的描述 program .version('0.0.1') .usage('[options] [value ...]') .option('-m, --message <string>', 'a string argument') .option('-i, --integer <n>', 'input a integet argument.', parseInt) .option('-f, --float <f>', 'input a float arg', parseFloat) .option('-l, --list <items>', 'a list', list) .option('-r, --range <a>..<b>', 'a range', range) //添加额外的文档描述 program.on('help', function() { console.log(' Examples:') console.log('') console.log(' # input string, integer and float') console.log(' $ ./nodecmd.js -m \"a string\" -i 1 -f 1.01') console.log('') console.log(' # input range 1 - 3') console.log(' $ ./nodecmd.js -r 1..3') console.log('') console.log(' # input list: [1,2,3]') console.log(' $ ./nodecmd.js -l 1,2,3') console.log('') }); //解析commandline arguments program.parse(process.argv) //输出结果 console.info('--messsage:') console.log(program.message); console.info('--integer:') console.log(program.integer) console.info('--range:') console.log(program.range) console.info('--list:') console.log(program.list)
效果:
m-lv:node lvjian$ ./nodecmd.js -v
0.0.1
m-lv:node lvjian$
m-lv:node lvjian$ ./nodecmd.js -m 'node cmd' -i 1 -f 2.0 -r 1..10 -l 1,2,3,4
--messsage:
node cmd
--integer:
1
--range:
[ 1, 10 ]
--list:
[ '1', '2', '3', '4' ]
m-lv:node lvjian$
m-lv:node lvjian$ ./nodecmd.js -h
Examples:
# input string, integer and float
$ ./nodecmd.js -m "a string" -i 1 -f 1.01
# input range 1 - 3
$ ./nodecmd.js -r 1..3
# input list: [1,2,3]
$ ./nodecmd.js -l 1,2,3
Usage: nodecmd.js [options] [value ...]
Options:
-v, --version output the version number
-m, --message <string> a string argument
-i, --integer <n> input a integet argument.
-f, --float <f> input a float arg
-l, --list <items> a list
-r, --range <a>..<b> a range
-h, --help output usage information
m-lv:node lvjian$
参考资料:
Commander.js: https://github.com/visionmedia/commander.js
Ruby Commander: https://github.com/visionmedia/commander