Skip to Content
AI 时代的 CLI 工具开发实战附录 A:CLI 开发常用库速查表

附录 A:CLI 开发常用库速查表

按功能分类整理,每个库标注一句话描述和适用场景。版本和 API 以 2025 年为准。


CLI 框架

库npm 包名描述适用场景
Commander.jscommanderNode.js 生态最主流的命令行解析库,API 简洁,文档完善绝大多数 CLI 项目的首选,本书配套项目 repox 使用
yargsyargs功能丰富的命令行解析库,自动生成帮助信息和补全脚本需要复杂参数校验和自动补全的项目
caccac轻量级命令行解析库,API 类似 Commander 但体积更小对依赖体积敏感的小型 CLI
Clipanionclipanion类型安全的命令行框架,Yarn 内部使用TypeScript 重度用户,追求编译期命令校验
oclifoclifSalesforce 出品的企业级 CLI 框架,内置插件系统和代码生成大型 CLI 工具、需要插件生态的项目
meowmeow极简 CLI 辅助库,只做参数解析,不管命令注册单命令工具、脚本级 CLI

交互

库npm 包名描述适用场景
@inquirer/prompts@inquirer/promptsInquirer.js v2,模块化架构,按需引入单个 prompt 类型需要交互式问答的 CLI(推荐,替代旧版 inquirer)
promptsprompts轻量级交互提示库,零依赖,支持链式问答追求最小依赖的项目
enquirerenquirer功能丰富的交互库,内置表单、多选、自动补全等复杂交互需要高级交互模式(如表单、snippet)的场景
@clack/prompts@clack/prompts美观的交互组件,自带视觉风格重视视觉一致性的现代 CLI

输出美化

库npm 包名描述适用场景
chalkchalk终端文本着色,支持 256 色和 TrueColor通用文本着色,生态最成熟
picocolorspicocolors极小体积的终端着色库(≈2KB),性能好对体积和性能敏感的项目(推荐作为 chalk 替代)
kleurkleur轻量终端着色库,API 简洁chalk 的轻量替代
colorettecolorette另一个轻量着色库,和 picocolors 定位相同同 picocolors
cli-table3cli-table3终端表格渲染,支持合并单元格和对齐展示结构化数据
boxenboxen在终端中渲染带边框的文本框突出显示重要信息(版本更新提示等)
listr2listr2任务列表管理器,支持并发任务和嵌套子任务多步骤任务的进度展示
oraora优雅的终端 spinner单个异步操作的加载提示
cli-spinnerscli-spinnersSpinner 动画帧集合(70+ 种样式)配合自定义 spinner 使用
log-symbolslog-symbols跨平台的日志符号(✓ ✗ ℹ ⚠)状态信息展示
figuresfiguresUnicode 符号,Windows 降级为 ASCII 替代跨平台符号输出
terminal-linkterminal-link终端可点击链接(支持的终端中)输出中嵌入 URL
gradient-stringgradient-string终端文本渐变色品牌化的 CLI 欢迎信息
cli-highlightcli-highlight终端代码语法高亮显示代码片段

参数校验

库npm 包名描述适用场景
zodzodTypeScript-first 的 schema 校验库,类型推导强大配置文件和参数校验首选
yupyup基于链式 API 的对象校验库偏好链式 API 的项目
joijoi功能最完整的校验库,hapi 生态出品需要极其细粒度校验规则的场景
ajvajvJSON Schema 校验器,性能极好基于 JSON Schema 的校验
typebox@sinclair/typebox用 TypeScript 语法定义 JSON Schema需要同时生成 JSON Schema 和 TypeScript 类型
valibotvalibot模块化 schema 库,体积小于 zod对 bundle 体积极度敏感

配置

库npm 包名描述适用场景
cosmiconfigcosmiconfig自动搜索配置文件(package.json / .rc / .config.js 等)需要多种配置文件格式的 CLI
confconf简单的持久化配置存储,遵循 XDG 规范存储用户偏好和凭证
rcrc按优先级合并配置源(默认值 < 配置文件 < 环境变量 < 命令行参数)需要多层配置覆盖的项目
dotenvdotenv从 .env 文件加载环境变量本地开发环境的密钥管理
dotenv-expanddotenv-expanddotenv 扩展,支持变量引用($VAR).env 文件中需要变量引用
env-pathsenv-paths获取 OS 特定的数据/配置/缓存目录路径遵循 XDG 规范存储文件

文件操作

库npm 包名描述适用场景
globbyglobby基于 fast-glob 的文件匹配,支持 .gitignore 过滤按模式查找文件
fast-globfast-glob高性能 glob 匹配引擎globby 的底层库,追求极致性能时直接使用
chokidarchokidar跨平台文件监听,比 Node.js 原生 fs.watch 稳定watch 模式、热重载
fs-extrafs-extrafs 模块增强,添加 copy / move / mkdirp / remove 等方法频繁的文件系统操作
tmptmp创建临时文件和目录,进程退出时自动清理需要临时工作空间的操作
proper-lockfileproper-lockfile跨平台文件锁防止多个 CLI 实例同时写同一个文件

网络

库npm 包名描述适用场景
undiciundiciNode.js 官方 HTTP 客户端,性能好,支持 HTTP/1.1 和 HTTP/2Node.js 18+ 项目的首选 HTTP 客户端
gotgot功能丰富的 HTTP 客户端,支持重试、分页、钩子需要高级 HTTP 功能(重试、超时、流)的场景
kyky基于 Fetch API 的轻量 HTTP 客户端偏好 Fetch 风格 API 的项目
node-fetchnode-fetchFetch API 的 Node.js polyfillNode.js 16 以下需要 Fetch API 的项目(18+ 已内置)
eventsource-parsereventsource-parserServer-Sent Events (SSE) 解析器解析 AI API 的流式响应

进程管理

库npm 包名描述适用场景
execaexeca子进程执行增强,Promise 接口,自动处理转义和编码任何需要调用外部命令的场景(推荐)
cross-spawncross-spawn跨平台 child_process.spawn,修复 Windows 上的路径和引号问题需要跨平台兼容的子进程调用
shelljsshelljs在 Node.js 中使用 Unix shell 命令(cp, rm, mkdir 等)构建脚本、需要类 shell 操作但不想依赖 bash
tree-killtree-kill杀掉进程及其所有子进程清理子进程树,避免僵尸进程
signal-exitsignal-exit可靠的进程退出事件监听需要在各种退出场景下执行清理

终端 UI

库npm 包名描述适用场景
inkink用 React 构建终端界面,Flexbox 布局复杂交互式 TUI(本书第 13 章)
ink-text-inputink-text-inputInk 文本输入组件Ink 应用中的文本输入
ink-select-inputink-select-inputInk 选择列表组件Ink 应用中的列表选择
ink-spinnerink-spinnerInk Spinner 组件Ink 应用中的加载动画
ink-tableink-tableInk 表格组件Ink 应用中的数据表格
blessedblessed功能完整的终端 UI 库,curses 风格需要窗口、滚动条等传统 TUI 元素
terminal-kitterminal-kit全功能终端工具包,支持鼠标、绘图、菜单需要鼠标支持或图形绘制

测试

库npm 包名描述适用场景
vitestvitestVite 驱动的测试框架,ESM 原生支持,兼容 Jest APITypeScript + ESM 项目的首选(推荐)
jestjest最流行的测试框架,生态完善已有 Jest 基础设施的项目
avaava简洁的并发测试框架偏好最小化测试 API 的项目
nocknockHTTP 请求拦截和 mock测试 HTTP 调用(API 集成测试)
mswmswMock Service Worker,可拦截 fetch 和 XHR比 nock 更现代的 HTTP mock 方案
strip-ansistrip-ansi去除 ANSI 转义序列测试中比较终端输出文本
mock-stdinmock-stdin模拟 stdin 输入测试交互式 CLI 的输入处理

发布与版本管理

库npm 包名描述适用场景
changesets@changesets/cli变更集管理,适合 monorepo,生成 CHANGELOG需要精细控制版本和变更日志的项目(推荐)
semantic-releasesemantic-release基于 commit message 自动决定版本号并发布全自动化发布流程
npnp交互式 npm 发布辅助工具手动发布但希望有引导流程
standard-versionstandard-version基于 conventional commits 生成版本和 CHANGELOG遵循 conventional commits 规范的项目
bumppbumpp交互式版本号 bump 工具轻量级版本管理
pkg-pr-newpkg-pr-newPR 级别的预发布,每个 PR 自动发布可安装的预览版需要让 PR 作者/审查者试用未合并的改动

通用工具

库npm 包名描述适用场景
debugdebug基于命名空间的调试日志,通过环境变量控制输出开发和排查问题时的调试信息
update-notifierupdate-notifier检查 npm 新版本并提示用户更新所有公开发布的 CLI 工具
openopen跨平台打开 URL、文件或应用在浏览器中打开文档或认证页面
clipboardyclipboardy跨平台剪贴板读写复制输出到剪贴板
whichwhich查找可执行文件路径(Node.js 版 which 命令)检查外部依赖是否安装
semversemver语义化版本号解析和比较版本号相关的逻辑
minimatchminimatchglob 模式匹配判断文件路径是否匹配某个模式
wrap-ansiwrap-ansiANSI 感知的文本换行在固定宽度中正确换行带颜色的文本
slice-ansislice-ansiANSI 感知的文本截取截取带颜色文本时不破坏转义序列
string-widthstring-width计算字符串的显示宽度(正确处理中文和 emoji)终端中的文本对齐

本书资源

继续阅读 · 同作者其他书

Last updated on