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