为什么选择 Rattail
问题
Vite+ 很好地将构建相关的工作收敛到了一个工具中。但在企业级开发中,仍有一些事情需要自己去串联:
- 发布流程 — 版本号管理、npm 发布、Changelog 生成
- Git Hooks — 提交信息校验、lockfile 变更检测
- API 代码生成 — 从 OpenAPI/Swagger Schema 生成类型安全的 API 模块
- 工具函数 — 字符串、数组、对象等每个项目都会用到的通用工具
AI Agent 友好
一个越来越实际的考量——AI 编程助手在工具链内聚的情况下工作得更好:
- 单一依赖 — 只需要了解一个库,而不是一堆各有各 API 的工具。
- 统一的 Skills — Rattail 提供 Agent Skills,让 AI 助手一次性理解整个工具链。
- 内置预设 — 工具链提供的 lint、format 等预设让 AI 助手能直接理解项目的代码规范,生成的代码天然符合团队约定。
- 一致的模式 — 每个 CLI 命令都是配置驱动,每个工具函数都遵循相同的导入约定。可预测的结构让生成的代码更可靠。
- 集中的上下文 — 所有相关知识在一处,不用在十几个独立的文档站点之间来回跳转。
设计原则
- 补充 Vite+ — Rattail 覆盖 Vite+ 有意不涉及的部分,而不是重复它已经做好的事情。
- 配置驱动 — CLI 命令从
vite.config.ts读取配置,没有散落的配置文件。 - 渐进式采用 —
rattail/vite-plus提供预设,rattail/cli提供命令行工具,rattail提供工具函数。用什么取什么,不用的不引入。 - 合理的默认值 — 开箱即用,需要时可以自定义。
Rattail 做了什么
Rattail 大致从三个方向把这些零散能力收拢起来:
- 配置统一 — 把 lint、format、
staged以及与发布、Hooks、API 生成等相关选项放进vite.config.ts,与 Vite+ 同一入口维护,减少散落在项目根目录的配置文件。 - 命令行工具 — 提供
rtCLI,从同一份配置读取参数,用同一套源驱动发布、changelog、Git hooks、OpenAPI 生成等周边任务。 - 工具函数 — 通过
rattail主包导出大量可 Tree-shake 的方法,覆盖字符串、集合、请求等日常开发里反复出现的细节。
ts
// vite.config.ts
import {
defineConfig,
lint,
fmt,
staged,
hook,
clean,
} from 'rattail/vite-plus'
export default defineConfig({
lint: lint(),
fmt: fmt(),
staged: staged(),
rattail: {
// rt clean
clean: clean(),
// rt hook
hook: hook(),
// rt api
api: {
input: './openapi.json',
output: './src/apis',
},
// rt release
release: {},
// rt changelog
changelog: {},
},
})