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 npm install全局安装和本地安装的区别
Jun 05 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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 面向对象 PHP5 中的常量
2010/05/05 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python监控nginx端口和进程状态
2019/09/06 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
土木工程专业个人求职信
2013/12/30 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
秋天的雨教学反思
2014/04/27 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
报到证办理个人委托书
2014/10/06 职场文书
指导教师推荐意见
2015/06/05 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js