关于 cli-building
面向 CLI 开发者的构建指南,涵盖新建命令行工具、交互式终端应用及扩展现有项目。重点包括异步 I/O、可组合命令和清晰的终端输出。
主要功能
- 01异步优先的 I/O 模式
- 02可组合的命令架构
- 03分支流程的策略模式
- 04输出格式与颜色指引
- 05框架选择建议
- 06错误处理与测试指引
适用场景
- 01规划新的 CLI 工具
- 02为现有项目添加命令
- 03设计交互式终端应用
- 04选择 CLI 框架
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ siviter-xyz/ dot-agent --skill cli-building安装后在 Claude Code 中输入/cli-building确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/async-patterns.mdcomposable-commands.mdframeworks.mdoutput-formatting.mdstrategy-pattern.md详细介绍
CLI 构建
采用现代模式和最佳实践构建命令行界面的指南。
适用场景
- 创建新的 CLI 工具或命令
- 构建交互式终端应用
- 为现有项目添加命令
- 实现命令行界面
- 使用 CLI 框架
核心原则
- 异步优先:所有 I/O 操作都应使用 async/await,避免阻塞操作
- 可组合命令:命令应模块化且可复用,并使用命令组合
- 策略模式:对于分支工作流或基于任务的命令,使用策略模式
- 输出格式:正确格式化输出,并支持 Unicode 符号和颜色
框架选择
TypeScript/JavaScript
stricli(@bloomberg/stricli,推荐用于现代异步优先的 CLI):
- 从设计之初就支持 async/await
- 类型安全的命令定义,并支持完整的类型推断
- 延迟加载以提升启动性能
- 零依赖
oclif(替代方案):
- 成熟的框架,功能丰富
- 插件系统
- 适用于复杂的 CLI
Python
cyclopts(异步优先场景推荐):
- 现代的异步优先 CLI 框架
- 类型安全,异步支持出色
- API 设计简洁
typer(提供完整异步支持时使用):
- 基于 Python 类型提示
- 简洁直观
- 适用于简单到中等复杂度的 CLI
命令架构
可组合命令
将命令设计为可复用的模块:
- 共享命令实用工具
- 命令中间件
- 可复用的命令模块
- 命令组合模式
策略模式
在以下场景中使用策略模式:
- 工作流分支
- 基于任务的命令
- 动态命令路由
- 条件命令执行
输出格式
- 不使用表情符号:除非明确要求,否则不要使用表情符号
- Unicode 符号:使用 Unicode 符号(✓、✗、→、⚠)作为状态指示符
- 颜色支持:使用颜色库,绝不硬编码 ANSI 代码
- NO_COLOR:始终遵循
NO_COLOR环境变量 - 格式化:使用格式化提升可读性(粗体、暗色等)
异步模式
异步优先设计
所有 I/O 都应采用异步方式:
- 文件操作:使用异步文件 API
- 网络请求:使用异步 HTTP 客户端
- 进程执行:使用异步进程 API
- 数据库操作:使用异步数据库客户端
错误处理
妥善处理异步错误:
- 使用带 await 的 try/catch
- 处理 Promise 拒绝
- 提供清晰的错误消息
- 使用适当的退出码退出
命令结构
基本命令
// stricli example
import { createCli } from '@bloomberg/stricli';
async function myCommand() {
// Async implementation
}
const cli = createCli({
name: 'my-cli',
commands: {
'my-command': myCommand
}
});
cli.run();
# cyclopts example
from cyclopts import App
app = App()
@app.default
async def my_command():
# Async implementation
pass
if __name__ == '__main__':
app()
最佳实践
- 默认采用异步:所有操作都应为异步
- 可组合设计:构建可复用的命令模块
- 策略模式:用于工作流分支
- 正确格式化:使用 Unicode 符号和颜色,并支持 NO_COLOR
- 错误处理:提供清晰的错误消息和退出码
- 类型安全:使用 TypeScript 类型或 Python 类型提示
- 测试:单独测试各个命令
参考资料
如需详细指南,请参阅:
references/async-patterns.md- Async/await 最佳实践references/composable-commands.md- 命令组合模式references/strategy-pattern.md- 工作流策略模式references/output-formatting.md- 输出格式指南references/frameworks.md- 框架比较与选择
评论
支持 Markdown