commander

最小粒度脚手架

#!/usr/bin/env node

const commander = require('commander')
const pkg = require('../package.json')


const program = new commander.Command

program
  .version(pkg.version)
  .parse(process.argv) // 解析命令行参数

 

配置全局 options

#!/usr/bin/env node

const commander = require('commander')
const pkg = require('../package.json')

const program = new commander.Command

program
  .name('xiebenyin-test-cli') // 命令行交互头信息
  .usage('使用 <command> [options]')
  .version(pkg.version)
  .option('-d, --debug', '是否使用调试模式', false) // 配置全局 option 并设置默认值
  .option('-e, --env <env>', '获取环境变量') // 配置一个全局 option 并通过 env 接收值
  .parse(process.argv) // 解析命令行参数

console.log(program.opts()) // 打印所有全局 option 值

program.outputHelp() // 打印帮助文档信息

 

使用 command API注册命令

#!/usr/bin/env node

const commander = require('commander')
const pkg = require('../package.json')

const program = new commander.Command

program
  .name('xiebenyin-test-cli') // 命令行交互头信息
  .usage('使用 <command> [options]')
  .version(pkg.version)
  .option('-d, --debug', '是否使用调试模式', false) // 配置全局 option 并设置默认值
  .option('-e, --env <env>', '获取环境变量') // 配置一个全局 option 并通过 env 接收值

// 注册 clone 命令
// clone 命令必须传递一个 source 参数和一个可选 destination 参数
const clone = program.command('clone <source> [destination]')
clone
  .description('克隆项目') // 描述
  .option('-f, --force', '是否强制克隆') // 配置命令的 option
  .action((source, destination, cmdOption) => { // 获取执行 clone 命令时的参数
    console.log('do clone', source, destination, cmdOption)
  });


// 解析命令行参数
program.parse(process.argv) 

addCommand注册子命令

#!/usr/bin/env node

const commander = require('commander')
const pkg = require('../package.json')

const program = new commander.Command()

program
  .name('xiebenyin-test-cli') // 命令行交互头信息
  .usage('使用 <command> [options]')
  .version(pkg.version)
  .option('-d, --debug', '是否使用调试模式', false) // 配置全局 option 并设置默认值
  .option('-e, --env <env>', '获取环境变量') // 配置一个全局 option 并通过 env 接收值

// 生成一个 service 命令
const service = new commander.Command('service');

service
  .command('start <port>') // 在 service 命令中添加一个 start 子命令
  .description('开启一个端口')
  .action((port) => {
    console.log(`打开的端口是 ${port}`)
  });

service
  .command('stop') // 在 service 命令中添加一个 stop 子命令
  .description('关闭端口')
  .action(() => { // 命令执行时的逻辑
    console.log('成功关闭端口')
  })

program.addCommand(service) // 将已配置好的子命令添加到程序中

// 解析命令行参数
program.parse(process.argv) 

捕获没有匹配到的命令

program
  .arguments('<cmd> [options]')
  .description('获取没有匹配到的命令')
  .action(function (cmd, options) {
    console.log(cmd, options)
  })

 

自定义 help 信息

// 自定义 help 信息
program.helpInformation = function () {
  return ''
}
program.on('--help', function () { // 监听 help
  console.log('这是我自定义的help信息')
})

监听全局 option 选项

// 监听全局option中debug选项
program.on('option:debug', function () {
  console.log(program.opts(), '--debug输入了')
})

监听全局 command 命令

program.on('command:*', function (cmd) {
  console.log(`监听到了未知命令 ${cmd}`)
  const availableCommands = program.commands.map(cmd => cmd.name())
  console.log('可用命令', availableCommands)
})

 

posted @ 2022-05-17 17:51  霸哥yyds  阅读(605)  评论(0)    收藏  举报