Skip to content

commander 的使用方法

注册命令行命令

安装

BASH
npm i commander --save

基本使用

javascript
const commander = require('commander')

// 注册方式1:获取单例
const program = commander.program

// 注册方式2:生成一个实例
const program = new commander.Command()

// 使用
program
.name(Object.keys(pkg.bin)[0])                  //命令的名称(可不设,自动获取)
.version('1.0.0')                               //版本号
.usage('<command> [options]')                   //使用提示
.option('-d,--debug','是否开启调试模式',false)   //设置参数、提示、默认参数
.option('-e,--env <envName>','获取环境变量名称')
.parse(process.argv)                            //解析参数

命令注册的两种方法

  • 第一种:command
javascript
const clone = program.command('clone <source> [destination]'); //<>表示参数必填 []表示选填

clone
.description('clone a registry')                               // 命令描述,在-help时提示
.option('-f, --force','是否强制拷贝')                           //属于命令的选项
.action((source,destination,cmdOptions)=>{
  console.log('do clone',source,destination,cmdOptions.force)
})
  • 第二种:addCommand 注册子命令
javascript
// 子命令,对命令分组
const service = new commander.Command('service')

// 第一个子命令
service
  .command('start [port]')                //类似第一种命令注册方式
  .description('start service at port')
  .action((port)=>{
    console.log('do service start',port)
  })

// 第二个子命令
service
  .command('stop [port]')
  .description('stop service at port')
  .action((port)=>{
    console.log('do service stop',port)
  })

program.addCommand(service)

高级用法

  • 通配匹配命令
javascript
program
  .arguments('<cmd> [options]')     // 定义无匹配情况下的命令输入
  .description('test command',{     // 输入参数的描述
    cmd:'command to run',
    options:'options for command'
  })
  .action((cmd,options)=>{

  })
  • 命令后缀:输入command第二个参数启用命令后缀,第三个参数增强命令功能
javascript
program
  .command(
    'install [name]',                             //实际调用了 cli-install name
    'install package',
    {
      executableFile:'others cli',                // 指定使用其他命令,实际是:others cli name
      isDefault:true,                             // 无通配命令时,默认执行此命令
      hidden:true                                 // 隐藏此命令提示
    }
  )
  .alias('i')                                     // install 别名 i
  • 自定义help信息
javascript
// 方法 1
program.helpInfomation = function(){
  return 'your help infomation'
}

// 方法 2 监听并改写
program.on('--help',()=>{
  console.log('your help infomation')
})
  • debug模式
javascript
// 监听并修改环境变量
program.on('option:debug',()=>{
  if(program.opts().debug){
    process.env.LOG_LEVEL = 'verbose'
  }
})
  • 另一种未知命令监听
javascript
program.on('command:*',(options)=>{
  console.error(`未知的命令:${options[0]}`)
  // 可用命令提示
  const availableCommands = program.commands.map(cmd=>cmd.name());
  console.log('可用命令:' + availableCommands.join(','))
})