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 相关文章推荐
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
NodeJS实现一个聊天室功能
Nov 25 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造成压力的解决方法
2013/02/21 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
JavaScript 图像动画的小demo
2012/05/23 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
python实现简单飞行棋
2020/02/06 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
环境工程求职简历的自我评价范文
2013/10/24 职场文书
中学生学习生活的自我评价
2013/10/26 职场文书
酒店司机岗位职责
2013/12/14 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
招商银行工作证明
2015/06/17 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
JAVA API 实用类 String详解
2021/10/05 Java/Android
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android