#!/usr/bin/env node
const yargs = require('yargs/yargs')
const dedent = require('dedent') // 处理缩进
const pkg = require('../package.json')
const cli = yargs()
const argv = process.argv.slice(2)
const context = {
xiebenyinVersion: pkg.version
}
cli
.usage('使用: xiebenyin-test [command] <options>')
.demandCommand(1, '最少输入一个command或options') // 限制最少输入1个选项或命令
.strict() // 无法识别的命令会报错
.recommendCommands() // 输入无法识别的命令会提示存在的命令
.fail((msg, err) => { // 捕获错误
console.log(msg)
})
.alias('h', 'help') // 选项添加别名
.alias('v', 'version')
.wrap(cli.terminalWidth()) // 命令行交互宽度
.epilogue(dedent` 欢迎使用 xiebenyin 脚手架
命令[command] 选项[options]`) // 命令行底部内容
.option({ // 添加一个全局 options
debug: {
type: 'boolean',
describe: '使用 debug 模式', // 描述
alias: 'd', //别名
}
})
.option('registry', {
type: 'string',
describe: '默认全局注册',
alias: 'r',
// hidden: true, // 隐藏 option
})
.group(['debug'], '开发选项') // option分组
.group(['registry'], '发布选项')
// command 命令
.command('init [name]', '初始化项目', (yargs) => {
// builder 函数
yargs
.option('name', { // 给 init 命令添加一个 option 选项
type: 'string',
describe: '项目名称',
alias: 'n'
})
}, argv => {
// 执行命令需要做的逻辑
console.log(argv)
})
.command({ // 添加一个 list 命令
command: 'list',
aliases: ['ls', 'la', 'll'], // 别名
describe: '显示所有包',
builder: yargs => {
// 执行命令之前的逻辑 可以在这里给命令添加 option 选项
},
handler: argv => {
// 执行命令的逻辑
console.log(argv)
}
})
.parse(argv, context) // 解析参数 (argv会和context合并)