脚手架搭建-commander用法

84 阅读2分钟

基础用法

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('未知的命令')
    })