最小粒度脚手架
#!/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)
})