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之请求路由概述
Jul 05 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 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下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
javascript add event remove event
2008/04/07 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
javascript天然的迭代器
2010/10/29 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
跟老齐学Python之永远强大的函数
2014/09/14 Python
python迭代器与生成器详解
2016/03/10 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python爬取内容存入Excel实例
2019/02/20 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python实现猜拳游戏项目
2020/11/30 Python
Android面试题及答案
2015/09/04 面试题
《老山界》教学反思
2014/04/08 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers