commander是一个轻巧的nodejs模块,提供了用户命令行输入和参数解析强大功能。commander源自一个同名的Ruby项目。
commander的特性:
自记录代码自动生成帮助合并短参数(“ABC”==“-A-B-C”)默认选项强制选项命令解析提示符编写一个简单的例子:增加文件app.js
~ vi app.js
var program = require('commander'); program .version('0.0.1') .option('-p, --peppers', 'Add peppers') .option('-P, --pineapple', 'Add pineapple') .option('-b, --bbq', 'Add bbq sauce') .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') .parse(process.argv); console.log('you ordered a pizza with:'); if (program.peppers) console.log(' - peppers'); if (program.pineapple) console.log(' - pineapple'); if (program.bbq) console.log(' - bbq'); console.log(' - %s cheese', program.cheese);命令行输入测试:
//无参数 ~ D:\workspace\javascript\nodejs-commander>node app.js you ordered a pizza with: - marble cheese //一个参数 ~ D:\workspace\javascript\nodejs-commander>node app.js -c you ordered a pizza with: - marble cheese //多个参数 ~ D:\workspace\javascript\nodejs-commander>node app.js -cbp you ordered a pizza with: - peppers - bbq - marble cheese //help ~ D:\workspace\javascript\nodejs-commander>node app.js --help Usage: app.js [options] Options: -h, --help output usage information -V, --version output the version number -p, --peppers Add peppers -P, --pineapple Add pineapple -b, --bbq Add bbq sauce -c, --cheese [type] Add the specified type of cheese [marble] //Version ~ D:\workspace\javascript\nodejs-commander>node app.js -V 0.0.1需求描述:设计一个服务器启动命令,包括自命令:指定部署节点,配置选择:部署目录,部署配置文件,允许的IP列表,出始种子值,计算的阈值区间。
新建文件:myServer.js
~ vi myServer.js
var program = require('commander'); function range(val) { return val.split('..').map(Number); } function list(val) { return val.split(','); } program .version('0.0.1') .usage('test') .option('-C, --chdir [value]', '设置服务器节点','/home/conan/server') .option('-c, --config [value]', '设置配置文件','./deploy.conf') .option('-m, --max <n>', '最大连接数', parseInt) .option('-s, --seed <n>', '出始种子', parseFloat) .option('-r, --range <a>..<b>', '阈值区间', range) .option('-l, --list <items>', 'IP列表', list) program .command('deploy <name>') .description('部署一个服务节点') .action(function(name){ console.log('Deploying "%s"', name); }); program.parse(process.argv); console.log(' chdir - %s ', program.chdir); console.log(' config - %s ', program.config); console.log(' max: %j', program.max); console.log(' seed: %j', program.seed); program.range = program.range || []; console.log(' range: %j..%j', program.range[0], program.range[1]); console.log(' list: %j', program.list); //查看帮助信息 ~ D:\workspace\javascript\nodejs-commander>node myServer.js -h Usage: myServer.js test Commands: deploy <name> 部署一个服务节点 Options: -h, --help output usage information -V, --version output the version number -C, --chdir [value] 设置服务器节点 -c, --config [value] 设置配置文件 -m, --max <n> 最大连接数 -s, --seed <n> 出始种子 -r, --range <a>..<b> 阈值区间 -l, --list <items> IP列表 //通过命令行启动: ~ D:\workspace\javascript\nodejs-commander>node myServer.js -c /deploy/c1/config.conf -m 20 -s 19.1 -r 12..101 -l 192.168.1.1,192.168.1.2,192.168.1.3 deploy server1 Deploying "server1" chdir - /home/conan/server config - /deploy/c1/config.conf max: 20 seed: 19.1 range: 12..101 list: ["192.168.1.1","192.168.1.2","192.168.1.3"]其实就是简单地,把myServer.js改写一下。定义启动脚本:
#!/usr/bin/env node新建命令文件bin/myServer
~ D:\workspace\javascript\nodejs-commander>mkdir bin ~ vi myServer
#!/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('test') .option('-C, --chdir [value]', '设置服务器节点','/home/conan/server') .option('-c, --config [value]', '设置配置文件','./deploy.conf') .option('-m, --max ', '最大连接数', parseInt) .option('-s, --seed ', '出始种子', parseFloat) .option('-r,--range <a>..<b>', '阈值区间', range) .option('-l, --list ', 'IP列表', list) program .command('deploy ') .description('部署一个服务节点') .action(function(name){ console.log('Deploying "%s"', name); }); program.parse(process.argv); console.log(' chdir - %s ', program.chdir); console.log(' config - %s ', program.config); console.log(' max: %j', program.max); console.log(' seed: %j', program.seed); program.range = program.range || []; console.log(' range: %j..%j', program.range[0], program.range[1]); console.log(' list: %j', program.list);以命令方式运行
~ D:\workspace\javascript\nodejs-commander>node bin\myServer -c /deploy/c1/config.conf -m 20 -s 19.1 -r 12..101 -l 192.168 .1.1,192.168.1.2,192.168.1.3 deploy server1 Deploying "server1" chdir - /home/conan/server config - /deploy/c1/config.conf max: 20 seed: 19.1 range: 12..101 list: ["192.168.1.1","192.168.1.2","192.168.1.3"]原文: http://blog.fens.me/nodejs-commander/
