基础用法
Command构造函数
option的基础用法
const progame = new Commander.Command()
progame.name(Object.keys(pkg.bin)[0]).usage('<command> [options]')
.option('-d --debug','是否开启调试模式',false)
.option('-e --envName <envName>','环境变量')
// mw-cli -e prod ====> envName = prod debug=false
// mw-cli -d ==>debug=true
const allOptions = programe.opts()
脚手架注册命令的两种方式
通过command的方式
const progame = new Commander.Command()
const clone = programe.command('clone <source> [destination]') //注册命令
clone.action((source,destination,cmdObject)=>{
//具体命令执行的函数
console.log('clone',cmdObject) // {force : xxx} 第三个参数是option对象
}).description('clone a url')
.option('-f --force','是否强制克隆') //对于这个命令的option 不是全局的option
// mw-cli clone aaa source必须传 destination可选
通过addcommand方式
const progame = new Commander.Command()
const service= new Commander.Command('service') //传入了一个脚手架名称 这个时候脚手架就叫service
service.command('start [port]').action(port=>{
console.log(port)
})
// 会返回一个命令对象 不是脚手架sevice对象 所以这里不能连点
service.command('stop [port]').action(port=>{
console.log('stop)
})
//没有注册的命令的所有命令会走这里 强制要求有个<cmd>
programe.arguments('<cmd> [options]').action((cmd,env)=>{
console.log('cmd)
})
progame.addCommand(service)
// mw-cli service start 1000 多拉一层叫service
// mw-cli 报错 因为没有cmd
// mw-cli test ==> 打印test
高级用法
调用其他脚手架
const install = program
// mw-cl install init ===> 相当于执行 mengwan-cli init
.command('install [name]', 'install package', {
executableFile: 'mengwan-cli', //!修改可执行命令 这样可实现多个脚手架同步调用
//isDefault: true, // 表示直接执行mw-cli会直接执行这个命令 不会执行-h输出信息
// hidden:true // -h里面看不到这个命令
})
.alias('i')
修改自定义help信息
1.
programe.helpInfomation = ()=>{
}
2.
progame.on('--help',function(){
console.log('debug')})
实现debug模式
progame.on('option:debug',()=>{
if(progame.debug){
process.env.LOG_LEVEL = 'verbose'
}
})
// 对未知命令监听
除了arguments(')实现 , 还可以别的方式
通过progame.on('option:*' 可以监听到所有的option
通过progame.on('command:*' 可以监听到所有的command
program.on('command:*', (obj) => {
console.log('未知的命令', obj[0])
const avaliableCommands = program.commands.map((cmd) => cmd.name())
console.log('可用命令', avaliableCommands.join(','))
console.log('未知的命令')
})