nodejs命令行参数处理模块commander使用实例


Posted in NodeJs onSeptember 17, 2014

诚然,之前处理都是使用内置的process.agrv ,这个能work,但是不好使,于是tj大神给写了一个,my god,完全的高大上:

1、安装

npm install commander

2、option 解析

Options with commander are defined with the .option() method, also serving as documentation for the options. The example below parses args and options from process.argv, leaving remaining args as the program.args array which were not consumed by options.

#!/usr/bin/env node

 

/**

 * Module dependencies.

 */

 

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

Short flags may be passed as a single arg, for example -abc is equivalent to -a -b -c. Multi-word options such as “?template-engine” are camel-cased, becoming program.templateEngine etc.

3、自动生成help信息

$ ./examples/pizza --help

 

  Usage: pizza [options]

 

  Options:

 

    -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]

    -h, --help           output usage information

当然你也可以手动生成:

#!/usr/bin/env node

 

/**

 * Module dependencies.

 */

 

var program = require('../');

 

function list(val) {

  return val.split(',').map(Number);

}

 

program

  .version('0.0.1')

  .option('-f, --foo', 'enable some foo')

  .option('-b, --bar', 'enable some bar')

  .option('-B, --baz', 'enable some baz');

 

// must be before .parse() since

// node's emit() is immediate

 

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、举个完整的例子

function range(val) {

  return val.split('..').map(Number);

}

 

function list(val) {

  return val.split(',');

}

 

function collect(val, memo) {

  memo.push(val);

  return memo;

}

 

function increaseVerbosity(v, total) {

  return total + 1;

}

 

program

  .version('0.0.1')

  .usage('[options] <file ...>')

  .option('-i, --integer <n>', 'An integer argument', parseInt)

  .option('-f, --float <n>', 'A float argument', parseFloat)

  .option('-r, --range <a>..<b>', 'A range', range)

  .option('-l, --list <items>', 'A list', list)

  .option('-o, --optional [value]', 'An optional value')

  .option('-c, --collect [value]', 'A repeatable value', collect, [])

  .option('-v, --verbose', 'A value that can be increased', 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);
NodeJs 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
Nodejs极简入门教程(三):进程
Oct 27 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
nodejs实现UDP组播示例方法
Nov 04 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 NodeJs
详解NodeJS模块化
Jun 15 NodeJs
nodejs npm package.json中文文档
Sep 04 #NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 #NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 #NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 #NodeJs
NodeJS学习笔记之网络编程
Aug 03 #NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 #NodeJs
Google官方支持的NodeJS访问API,提供后台登录授权
Jul 29 #NodeJs
You might like
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python配置文件写入过程详解
2019/10/19 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
python几种常用功能实现代码实例
2019/12/25 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python如何写try语句
2020/07/14 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
化工专业个人的求职信范文
2013/11/28 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
农村党员一句话承诺
2014/05/30 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
内乡县衙导游词
2015/02/05 职场文书
文明礼仪倡议书
2015/04/28 职场文书
入党积极分子群众意见
2015/06/01 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技