日期:2014-05-16  浏览次数:20388 次

使用Commander.js驯服node.js的命令行参数

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

?