# CMC
CMC(CLI MANAGE CLI)! 命令行集成管理工具!
[toc]
# 背景
小明是某大厂的程序员,他善于使用各种命令行工具来实现他的某些需求———但随着公司以及社区的命令行工具安装的越来越多,他开始烦恼于如何记忆他们、管理他们; 而小明正在烦恼的时候,却不知道隔壁业务线又产出了新的命令行工具。
- 小明期望有一个统一的入口,来集成和管理所有命令
- 小明期望能方便的统一观察所有公司内产出的命令行工具,而不是单独的一个个了解它们。
而小明期望的,就是CMC的存在意义。
# 概念
# 命令行管理工具
CMC,是用来管理命令行工具的命令行工具。这么说可能有点绕,也许下面的例子可以让你明白:
@melody-core/melody-cli 是 音巢组织(作者所在的npm开源组织) 的CMC工具,它可以方便的集成与管理任意其他的命令行工具————比如@melody-core/leo,一个脚手架命令行工具。
@melody-core/melody-leo 是可以单独被安装和使用的,就像这样:
# 安装
yarn global add @melody-core/leo
# 使用它的命令去初始化一个项目
leo init
但我们更倾向于用melody-cli去管理和使用它,就像这样:
# 使用melody-cli安装它,前提是安装了@melody-core/melody-cli即可。
melody install @melody-core/melody-leo
# 使用leo脚手架 安装后,leo已被集成为melody-cli的扩展命令
melody leo init
# 更新leo
melody update leo
# 卸载leo
melody remove leo
也就是说,melody本身是个命令行集成与管理工具,它本身只包含对套件(也就是它安装的命令行工具)的增删改查的功能,但它可以基于已安装的套件去扩展它的能力和命令。
# 套件
每个符合melody-cli套件规范的npm包,都可以被视作为它的套件。套件可以理解为插件,可以扩展melody的命令,从而扩展melody的功能。当然,它们本身也都可以被当作一个独立的包。
# 设计
于是CMC的功能设计就自然而然了:
- 对套件的增删改查命令 => 集成与管理功能
- 来自于套件的扩展命令 => 扩展能力基于安装的套件
于是它的命令设计就:
# 基础命令 - 增删改查
命令 | 描述 | 具体使用 | 补充 |
---|---|---|---|
search | 查询套件 | melody search [package] | 不填参数时,默认查找所有音巢组织官方套件 |
install | 安装套件 | melody install <package> | package必填,例:melody install @melody-core/leo |
remove | 删除套件 | melody remove <package> | package必填,例:melody remove @melody-core/leo |
update | 更新套件 | melody update [package] | 不填参数时,默认更新所有已安装的套件 |
# 扩展命令
当安装了任意命令行套件之后,CMC就应该集成了套件的命令功能。
当然,你可能想给CMC增加更便捷的功能,比如自动同步版本进行更新等。
# 核心技术实现
- commander
commander是一个开源的、强大的命令行开发依赖。有关它的时候,你可以从它的官方文档了解: https://github.com/tj/commander.js/blob/HEAD/Readme_zh-CN.md
用commander去开发一个命令行工具,将会大大提升你的效率。尤其是前端,因为你可能更为熟悉node技术栈。
# 开发自定义套件
那么基于commander开发的套件,都可以集成为CMC的子命令。
# CMC工具示例
也许你可以尝试使用@melody-core/melody-cli,你会发现集成/管理命令行工具将会变得极其简单。
# 全局安装它即可
yarn global add @melody-core/melody-cli
wxy@melodyWxydeMacBook-Pro dragonSlaying % melody
Usage: melody [options] [command]
Options:
-v, --version 查看当前版本
-h, --help display help for command
Commands:
search 列出官方所有套件
install <package> 安装套件
remove <package> 删除套件
update [package] 更新套件
leo 初始化项目的脚手架命令工具
help [command] display help for command
wxy@melodyWxydeMacBook-Pro dragonSlaying % melody search
检索完毕!
┌─────────┬────────────────────┬─────────┬──────────────────────────────┬──────────┐
│ (index) │ plugin │ version │ desc │ install │
├─────────┼────────────────────┼─────────┼──────────────────────────────┼──────────┤
│ 0 │ '@melody-core/leo' │ '1.0.8' │ '初始化项目的脚手架命令工具' │ '已安装' │
wxy@melodyWxydeMacBook-Pro dragonSlaying % melody update @melody-core/leo
检索完毕
套件: @melody-core/leo 已是最新版本,version: 1.0.8
wxy@melodyWxydeMacBook-Pro dragonSlaying % melody leo
Usage: index [options] [command]
Options:
-V, --version output the version number
-v, --version 查看当前版本
-h, --help display help for command
Commands:
init 初始化一个项目模板
list 查看所有的项目模板
help [command] display help for command