原文:https://www.npmjs.com/package/commandernode
npm install commander --save
咱们使用.option()定义Options,其中--后面的做为commander变量名
option做为定义命令的选项,不能够单独使用 必须跟在命令后面git
#!/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开头的双划线选项一般表示否认的意思express
#!/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');
当咱们但愿获取版本的时候,一般使用-V或者--version,当这两种(either of these)选项出现时,会打印出版本号npm
$ ./examples/pizza -V 0.0.1
若是你想用户输入小写的v也能输出版本号时,只须要在options选项里将大写V改为小写的v
短标志你能够随便写,可是--version必须是固定的app
你能够将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就不会被验证,天然也不会报错ui
咱们有时候但愿对用户输入的信息作二次处理,以便更好的规范化数据this
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);
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);
命令的最后一个参数能够是可变参数,而且只能是最后一个参数。要使参数可变,你必须附加。到参数名。下面是一个例子:code
#!/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");
<>表示必须输入,[]表示可选输入orm
// 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
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
你能够经过监听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); });