CAC介绍
是一个JavaScript库,用于构建应用的CLI。
- 超轻量级:没有依赖关系,只有一个文件。
- 简单易学: 构建简单的CLI只需学习4种API :cli.option cli.version cli.help cli.parse。
- 功能抢到: 例如默认命令,类似git的子命令,对所需参数和选项进行验证,可变参数,点嵌套选项,自动帮助消息生成等功能。
- 开发人员友好: 用TypeScript编写。
安装CAC
yarn add cac
引入cac
src/cli.ts
import cac from 'cac'
// 从package.json中获取版本及名字
import { name, version } from '../package.json'
// 实例化cac
const cli = cac(name)
/**
* 定义异常处理公共函数
* @param err
*/
const onError = (err: Error): void => {
console.error(err.message)
process.exit(1)
}
// 监听未捕获的异常事件
process.on('uncaughtException', onError)
// 监听Promise未捕获的异常事件
process.on('unhandledRejection', onError)
cli
// 添加命令 ‘<>’ 中为必填项,'[]'中为选填项
.command('<template> [project]', 'Create new project from a template')
// 添加配置 --force 简写为 -f;
// 如果目标存在则覆盖
.option('-f, --force', 'Overwrite if the target exists')
// 添加配置 --offline 简写为 -o ;
// 是否使用本地模板
.option('-o, --offline', 'Try to use an offline template')
// 示例内容配置
.example(' # with an official template')
.example(` $ ${name} <template> [project]`)
.example(' # with a custom github repo')
.example(` $ ${name} <owner>/<repo> [project]`)
// 定义一个动作,传入一个回调函数
.action((template: string, project: string = '.', options) => {
console.log(template, project, options)
})
// -h, --help出现标志时输出帮助信息。
cli.help()
// -v, --version 出现标志时输出版本号。
cli.version(version)
cli.parse()
测试命令
# 默认命令
<projectName> template project -f -o
# 输出结果
# 第一个参数是传入的模板名字 第二个是项目名字 第三个是传入的options
template project { '--': [], f: true, o: true, force: true, offline: true }
# 帮助命令
<projectName> -h
<projectName> --help
# 输出结果
<projectName> v1.0.0
Usage:
$ <projectName> <template> [project]
Commands:
<template> [project] Create new project from a template
For more info, run any command with the `--help` flag:
$ <projectName> --help
Options:
-f, --force Overwrite if the target exists
-o, --offline Try to use an offline template
-h, --help Display this message
-v, --version Display version number
Examples:
# with an official template
$ <projectName> <template> [project]
# with a custom github repo
$ <projectName> <owner>/<repo> [project]
# 查看版本命令
<projectName> -v
<projectName> --version
# 输出结果
# <projectName>/1.0.0 darwin-x64 node-v13.13.0