Commander
安装
yarn add commander
添加版本信息version
var program = require('commander');
program
.version('0.0.1')
.parse(process.argv);
#执行结果:
node index.js -V
0.0.1
#如果希望程序响应-v选项而不是-V选项,
#只需使用与option方法相同的语法将自定义标志传递给version方法
program
.version('0.0.1', '-v, --version')
添加参数option
语法:.option('-n, --name <items1> [items2]', 'name description', 'default value')
自定义标志
<必须>
:分为长短标识,中间用逗号、竖线或者空格分割;标志后面可跟必须参数或可选参数,前者用<>
包含,后者用[]
包含选项描述
<省略不报错>
:在使用--help
命令时显示标志描述默认值
<可省略>
短标志可以作为单独的参数传递。像
-abc
等于-a -b -c
。多词组成的选项,像--template-engine
会变成program.templateEngine
等。
布尔值参数
// 可以通过 -v 或侧 --version 来使用
program.option('-v --version', '显示当前版本号')
// 程序内通过以下方式使用
program.parse().opts().version
可选参数 "[]
"
// 当我们要指定一个必须填写的参数时,
program.option('-o --output [output_path]')
必要参数 "<>
"
// 后面的outputFile为可选参数,当没有输入时为nudefined
program.option('-c, --compress <intputFile> [outputFile]')
// 程序内通过以下方式使用
program.parse().opts().compress
命令别名
熟悉使用npm的就很好理解
# 不使用别名调用npm安装一个库
npm install commander --global
# 使用别名的话
npm i commander -g
别名设置alias
program.command('install [name]', 'install one or more packages').alias('i')
参数校验
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.1.0')
.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);
# 执行结果
node index.js -i 1.2 -f 1.2 -r 1..2 -l a,b -o hehe -c heihei -v zeze
int: 1
float: 1.2
optional: "hehe"
range: 1..2
list: ["a","b"]
collect: ["heihei"]
verbosity: 1
args: ["zeze"]
使用正则
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);
# 执行结果
node index.js -s hahah -d hehe
size: "medium"
drink: true
#size 没有输入值则报错,不符合正则则为默认值,符合正则则为size
#drink 没有输入则报undefined,不符合正则则为true,符合正则则为drink