Commander

原文: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);
});

原文地址:https://www.cnblogs.com/mrzhu/p/10252123.html

时间: 2024-11-08 10:10:50

Commander的相关文章

Midnight Commander强大的命令行文件管理器

Midnight Commander是一个对用户友好且强大的可视化字符界面文件管理器,不管你是新手还是高级用户,你都能轻而易举的使用它,它可以运行在系统控制台.xterm或者其他任何的伪终端设备.Midnight Commander为Unix类操作系统提供了一个清晰.友好.安全的操作接口,它使很多频繁的文件操作更有效率且保留了在命令行下的强大特性. Midnight Commander允许用户在命令行模式下使用屏幕的大部分空间来管理文件并且提供了一个清洗的文件层次结构,当然,在Telnet或者S

AutoIt Putty Commander

#include "GUIConstants.au3" #include <WindowsConstants.au3> #include <GuiListBox.au3> ;~ Global Const $WM_COMMAND = 0x0111 ;~ Global Const $LBN_SELCHANGE = 1 ;~ Global Const $LBN_DBLCLK = 2 $CONFIG_FILE = @ScriptDir & "\Putt

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

最近安装了下新版的“Total Commander 7.56”,发现它的默认设置是如此的不好用,现把对其个性化设置备份如下(符合大部分用户的操作习惯): 默认打开Total Commander 7.56,该软件非最大化,要想使其开启时最大化,操作如下: 第一步:单击右上角按钮,使其最大化状态: 第二步:“配置” --> “保存位置”:“配置” --> “保存设置” ,下次启动时,即可自动最大化. 外观: 显示: 图标: 字体: 颜色: 制表符: 文件夹标签: 自定义列: 语言: 操作方式: 编

CodeForces 321C Ciel the Commander

Ciel the Commander Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ID: 321C64-bit integer IO format: %I64d      Java class name: (Any) Now Fox Ciel becomes a commander of Tree Land. Tree Land, like its na

Educational Codeforces Round 23 E. Choosing The Commander (trie)

题目链接: Educational Codeforces Round 23 E. Choosing The Commander 题意: 一共有n个操作. 1.  插入一个数p 2.  删除一个数p 3.  询问有多少个数 使得 x^p<l 题解: 对于前两种操作用01trie就能解决. 对于对三个操作,我们考虑在trie上搜索. 1.  当l的bit位是1时,那边bit位是p的字数全部的数都会小于l,(因为p^p=0) 2.  当l的bit为是0时,那边只能向bit位是p的子树中搜. 这样算下来

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

Total Commander 7.57a  下载地址:http://www.baidu.com/s?wd=total commander 7.57 破解版 软件整体预览图:(注意,下面的版本我用的是美化版的水晶版,建议去使用原版,界面更加专业) 1.设置导航栏图标大小: 如上图所示,在椭圆出单击右键,点击“更改”,弹窗“自定义工具栏”对话框,设置图标外观大小为 30,如下图所示: 2.更改字体大小: 3.内置FTP 保持持续(长久)连接 技巧: 4.其他设置: 常用的快捷键: 1.Total

德国精品软件 看图软件介绍 Ashampoo&#174; Photo Commander 12

介绍一个可以和ACD See 媲美的软件.来自美丽的德国. 以下为官方介绍: 强大的图片管理让一切变得简单 喜欢拍照吗?您上次度假.婚礼 - 那些饱含着珍贵记忆的照片让我们的相册不断的飞速增长.以前,我们把照片放在鞋盒里,现在照片都保存在电脑中.但你还清楚上次度假时的照片还保存在哪里吗?你又是否对照片中那小小的瑕疵或是污点感非常讨厌,直接破坏了完美瞬间. Ashampoo Photo Commander 12 超级图片管理工具.高效的在大图中定位浏览,移除烦人的小缺陷.优化色彩和对比度,让照片焕

那些年尝试过的效率工具之Total Commander

昨天电脑文件很乱,想整理一下发现移动.复制文件要来回目录切换很麻烦,突然就又想起了用Total Commander——简称TC,很久之前尝试过但没坚持使用的工具. 借此机会总结一下自己对TC的认识,后续再陆续回顾总结一下尝试用过的其它效率工具. 1.尝试使用 刚工作那会儿,对提升效率软件很痴迷,无意中网上看到善用佳软介绍的TC, 发现资源管理占用系统资源不多,但是功能却可以做的如此强大: 左右双窗口,可以很方便的复制移动文件: 批量重命名,很方便的处理一些有规律的要重命名的场景: 展开目录树,可

MCMD Commander 命令解释及说明

MCMD  Commander 命令解释及说明 MCMD  属于命令行扩展解释工具,本软件基于delphi完成编写,    命令参数模仿PECMD,功能大致相同. _SKIP 格式 _SKIP <子过程名> 功能 定义子过程,并继续执行调用该子过程的 CALL 命令的下一条命令. 参数 子过程名称. 示例 _SKIP @SHELL 备注 ※_SKIP 与 _END 之间的命令(即子过程)只被对应的 CALL 命令执行,主流程会跳过这些命令. ※本命令与 _END 命令均不能在命令行中使用,其它

FVDI Commander products be replaced SVDI tools,really?

You may have heard that some FVDI Commander products are being replaced by the new SVDI tools. This is true for FVDI PSA. According to its manufacturer, it will stop producing FVDI PSA  and put more effort in the newly developed SVDI PSA for Peugeot