commander模块
commander模块用来制作命令行交互;一般命令行包含:命令,选项,参数:'fis3 release --optimize';官网实例:
#!/usr/bin/env node
var commander = require('commander');
commander.version('0.0.1')
.command('rmdir <dir> [otherDirs...]')
.action(function (dir, otherDirs) {
console.log('rmdir %s', dir);
if (otherDirs) {
otherDirs.forEach(function (oDir) {
console.log('rmdir %s', oDir);
});
}
});
commander.parse(process.argv);
搭建本地命令行工具环境:
- 在自己的项目文件夹根目录下创建app.js;并添加"#! /usr/bin/env node"代码,改代码表示shebang,定义解释器环境;
#!/usr/bin/env node
var commander = require('commander');
commander.version('1.0.1').parse(process.argv)
- 项目根目录建立package.json文件,并添加下面的字段值;
{
"name": "comm",
"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"commander": "^2.9.0",
},
"bin": { "poet": "app.js" }, //--加上这行字段信息,其他字段可以使用npm初始化的默认值
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"license": "ISC"
};
- 此时还无法执行'poet -version'命令;提示poet不是内部命令;'node app.js'提示语法错误;js不支持‘"#! /usr/bin/env node’字符;怎么办? 安装到nodejs的全局模块中去
npm install . -g //--安装到全局模块
npm link //--创建硬链接;
poet -v //--输出定义的版本信息‘1.0.1’;
commander中的方法:
option(flag,description):命令参数
//--命令参数
var commander = require('commander')
commander.option('-o,--optimize','optimize text')
.parse(process.argv);
if(commander.optimize){
console.log('optimize exist')
};
命令行: poet -o || poet --optimize
输出: optimize exist
- command(name,description) : 定义选项;name作为参数传入action函数中;
#!/usr/bin/env node
var commander = require('commander')
commander.command('releasse')
.description('des') //--定义描述
.alias('rl') //---定义别名
.action(function (name,args){ //---匹配到命令时执行的业务函数,参数:选项名和选项参数
console.log(name,args);
})
- version(str) : 定义版本
commander.version('0.01').parse(process.argv)
- description(str) : 定义选项和模块描述
//--命令模块描述
commander.option('-0, --optimize')
.descriptio('optiomze images')
//--选项描述
commander.command('release')
.description('release project')
- action(fn) : 匹配相应选项执行函数,接受选项名name和参数列表args;表示必须有该选项,[name...]表示可选选项
#!/usr/bin/env node
var commander = require('commander')
commander.command('lists <name> [books...]')
.description('run lists commands')
.action(function(name, books) {
console.log('name "%s"', name);
if (books) {
books.forEach(function (book) {
console.log('book "%s"', book);
});
}
});
commander.parse(process.argv)
//--命令行输入:
poet lists libai jingyesi zengwanglun
//--输出
name "libai"
book "jingyesi"
book "guanluori"
-
alias(name) : 定义别名;用于选项;参数定义无效;
-
allowUnknownOption() : 允许未定义的参数,执行中不报错;
-
otps(): 返回options的键值对表示的对象
#!/usr/bin/env node
var commander = require('commander')
commander.option('--optimize')
.option('--age','age')
.parse(process.argv);
if(commander.optimize){
console.log('optinize')
console.log(commander.opts())
}
命令行: poet --optimize
optinize { optimize: true, age: undefined }
-
outputHelp(fn): 定义hlep输出信息,将覆盖模块内部的输出信息;
-
help(fn) :其实就是outputHelp和process.exit()的组合;
转自:https://www.kancloud.cn/diaoyundexia/text/content/commander.md
参考:https://www.cnblogs.com/Mobro/p/10256333.html
网友评论