原文:https://www.npmjs.com/package/commander

Commander.js

Installation

npm install commander --save

Option 语法解析(parsing)

我们使用.option()定义Options,其中--后面的作为commander变量名

option作为定义命令的选项,不可以单独使用 必须跟在命令后面

#!/usr/bin/env node

/**
* Module dependencies.
*/ var program = require('commander'); program
.version('0.1.0')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
.option('-b, --bbq-sauce', '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.bbqSauce) console.log(' - bbq');
console.log(' - %s cheese', program.cheese);

短参数可以作为单个参数传递,比如 -abc相似于(is equivalent to)-a -b -c,两个横线的选项经常被用作变量名,以--no开头的双划线选项通常表示否定的意思

#!/usr/bin/env node

/**
* Module dependencies.
*/ var program = require('commander'); program
.option('--no-sauce', 'Remove sauce')
.parse(process.argv); console.log('you ordered a pizza');
if (program.sauce) console.log(' with sauce');
else console.log(' without sauce');

Version option

当我们希望获取版本的时候,通常使用-V或者--version,当这两种(either of these)选项出现时,会打印出版本号

$ ./examples/pizza -V
0.0.1

如果你想用户输入小写的v也能输出版本号时,只需要在options选项里将大写V改成小写的v

短标志你可以随便写,但是--version必须是固定的

command命令

你可以将option依附在command上

#!/usr/bin/env node

var program = require('commander');

program
.command('rm <dir>')
.option('-r, --recursive', 'Remove recursively')
.action(function (dir, cmd) {
console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''))
}) program.parse(process.argv)

当该command被运行的时候,可以验证option,任何未知的命令都将报错,但是,如果command命令上并没有定义action,option就不会被验证,自然也不会报错

强制处理(Coercion)

我们有时候希望对用户输入的信息做二次处理,以便更好的规范化数据

function list(val) {
return val.split(',');
} program
.version('0.1.0')
.usage('[options] <file ...>')
.option('-i, --integer <n>', 'An integer argument', parseInt)
.option('-l, --list <items>', 'A list', list)
.parse(process.argv); console.log(' int: %j', program.integer);
console.log(' list: %j', program.list);

Regular Expression

program
.version('0.1.0')
.option('-s --size <size>', 'Pizza size', /^(large|medium|small)$/i, 'medium')
.option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i)
.parse(process.argv); console.log(' size: %j', program.size);
console.log(' drink: %j', program.drink);

Variadic arguments

命令的最后一个参数可以是可变参数,并且只能是最后一个参数。要使参数可变,你必须附加。到参数名。下面是一个例子:

#!/usr/bin/env node

/**
* Module dependencies.
*/ var program = require('commander'); program
.version('0.1.0')
.command('rmdir <dir> [otherDirs...]')
.action(function (dir, otherDirs) {
console.log('rmdir %s', dir);
if (otherDirs) {
otherDirs.forEach(function (oDir) {
console.log('rmdir %s', oDir);
});
}
}); program.parse(process.argv);

指定参数语法

#!/usr/bin/env node

var program = require('commander');

program
.version('0.1.0')
.arguments('<cmd> [env]')
.action(function (cmd, env) {
cmdValue = cmd;
envValue = env;
}); program.parse(process.argv); if (typeof cmdValue === 'undefined') {
console.error('no command given!');
process.exit(1);
}
console.log('command:', cmdValue);
console.log('environment:', envValue || "no environment given");

<>表示必须输入,[]表示可选输入

Git-style风格命令

// file: ./examples/pm
var program = require('commander'); program
.version('0.1.0')
.command('install [name]', 'install one or more packages')
.command('search [query]', 'search with optional query')
.command('list', 'list packages installed', {isDefault: true})
.parse(process.argv);

当使用.command()的时候,如果使用了描述参数,那么就不能使用action命令,否则会报错,这告诉commander你将要使用分离的(separate)可执行文件(executables)来执行命令,commander 将试图寻找和你在command里面声明的命令类似的文件夹,可以使用Options 选项,Options 也可以在.command()中使用,如果指定opts.noHelp是true,将从对应的command命令中移除help信息,如果指定opts.isDefault为true,如果没有指定其他子命令,isDefault将运行子命令。如果你的程序被设置为全局安装,请确保你的可执行文件的权限正当.

--harmony

你有两种方式启用harmony

1:在你的可执行文件最上面使用#! /usr/bin/env node --harmony

2:当使用命令的时候 加上--harmony

设置帮助信息

commander 会根据一些已有信息去自动生成帮助信息

自定义帮助信息

你可以显示任何帮助信息通过监听--help,Commander 将自动退出程序的剩余部分当你使用--help的时候,这样就不会一起其他问题了
#!/usr/bin/env node

/**
* Module dependencies.
*/ var program = require('commander'); program
.version('0.1.0')
.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('')
console.log('Examples:');
console.log(' $ custom-help --help');
console.log(' $ custom-help -h');
}); program.parse(process.argv); console.log('stuff');

如何你想测试你的帮助信息设置,只需要运行node 你的可执行文件名称.js --help:

Usage: custom-help [options]

Options:
-h, --help output usage information
-V, --version output the version number
-f, --foo enable some foo
-b, --bar enable some bar
-B, --baz enable some baz Examples:
$ custom-help --help
$ custom-help -h

自定义事件监听(Custom event listeners)

你可以通过监听commond或者option来完成自定义事件

program.on('option:verbose', function () {
process.env.VERBOSE = this.verbose;
}); // error on unknown commands
program.on('command:*', function () {
console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
process.exit(1);
});

Commander的更多相关文章

  1. 如何修改Total Commander配件文件的位置

    今天测试了一下Total Commander最新版的安装文件,测试完成后,并删除.结果导致原先一直在使用的绿色版的Total Comander配件文件变成了测试的配件文件,导致许多配置都丢失了,因此不 ...

  2. 【荐1】Total Commander 7.57 个人使用设置 及 常用快捷键 备忘

    Total Commander 7.57a  下载地址:http://www.baidu.com/s?wd=total commander 7.57 破解版 软件整体预览图:(注意,下面的版本我用的是 ...

  3. 【荐2】Total Commander 7.57 配置选项 个性化设置备份,,,开启时如何自动最大化???(二)

    最近安装了下新版的“Total Commander 7.56”,发现它的默认设置是如此的不好用,现把对其个性化设置备份如下(符合大部分用户的操作习惯): 默认打开Total Commander 7.5 ...

  4. Mac Pro 资源管理器 Double Commander“个性化设置” 备份

    操作系统自带的资源管理器,总是有些别扭的地方,在 Windows 系统下,我一般用 Total Commander(破解版)来作为替代品.现在换为 Mac 系统,自带的 Finer 也不怎么好用,连最 ...

  5. Total Commander 8.52 Beta 1

    Total Commander 8.52 Beta 1http://www.ghisler.com/852_b1.php 10.08.15 Release Total Commander 8.52 b ...

  6. TC(Total Commander)文件管理神器

    TC文件管理神器 Total Commander是一个会显著提高文件操作效率的工具,而文件操作是应用计算机最基本的功夫,也是伴随一生的操作.因此花一点时间学习,而会受益一世. Total Comman ...

  7. Total Commander 常用快捷键(并附快捷键大全)

    Total Commander 常用快捷键 喜欢用Total Commander的人,都会记住它的一些快捷键,这会给你的操作带来很大的方便,以下是经常会用到的快捷键,大家可以记住一些自己用得最多的操作 ...

  8. node生成自定义命令(yargs/commander)

    第一部分可以生成一个自定义命令,例如常见的”express”,yargs和commander则可以在生成的自定义命令上做扩展,yargs将命令扩展成类似express --l xx的形式;而comma ...

  9. Ubuntu下类似于Total Commander的两个工具

    Total Commander for linux Is there a Linux version? Unfortunately not. Because of problems with port ...

  10. total commander相关设置

    一. 中文语言包 在官方网站上提供有简体中文语言包,下面的说明以此为准.下载的语言包放至Total Commander安装目录下的Language子目录中.从菜单“Configuration”→“Op ...

随机推荐

  1. web自动化测试python+selenium学习总结----python环境安装

    一.python下载地址:https://www.python.org/downloads/ 二.双击python的.exe文件安装: 后面直接点击“next” 步骤二:选择安装在D:\python3 ...

  2. 蓝桥杯c/c++省赛真题——明码

    标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.###16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. ###一个字节可以存储8位信息,用3 ...

  3. centos上发布部署python的tornado网站项目完整流程

    先说下大体上的做法,开发环境上要新弄一个 virtualenv的环境,在这个里面放你的开发调试,当然这个其实也不是必须的,但是这样会方便管理一些. 再在centos上也弄一个 virtualenv虚拟 ...

  4. 编程规范(初尝ES6与webpack)

    //针对ES6规范(第1-5条)start1.块级作用域let/const取代var:在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. 2.解构赋值1 ...

  5. Node.js 搭建 https 协议 服务器

    var https = require('https'); //创建服务器 https var fs = require('fs'); //文件系统的模块 const hostname = '127. ...

  6. 在dotnetcore的MVC项目中,创建支持 vue.js 的最小工程模板

    网上Vue模板不是最新的,我自己做了一个最新的支持 Vue.js 的最小工程模板,方便大家从 Hello world. 入门, 在 VS2017 里学习,并扩展出自己的项目. 下面是创建步骤: 1.在 ...

  7. redis 在 php 中的应用(key篇)

    本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL           ...

  8. 解决ssh连接问题2

    ssh远程出现问题shell request failed on channel 0 1.修改/etc/security/limits.conf ssh_exchange_identification ...

  9. go区块链学习教程之iris框架mvc架构

    在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发. iris框架支持请求数据.模型.持久数据分层处理,并支持各层级模块代码绑定执行. MVC即:model ...

  10. linux 命令中英文对照,收集

    linux 命令中英文对照,收集   linux 命令英文全文 Is Linux CLI case-sensitive? The answer is, yes. If you try to run L ...