删除 start/build:web/format:check,简化 check 为 typecheck+lint+test 引入 eslint-plugin-prettier 将 Prettier 集成至 ESLint,统一质量检查入口 简化 lint-staged 配置,扩展 clean 清理范围至 dist/
2.5 KiB
2.5 KiB
Purpose
定义 Git hooks 自动化质量门禁行为,在 pre-commit 阶段自动运行代码检查和格式化,在 commit-msg 阶段校验提交信息格式。
Requirements
Requirement: pre-commit 自动质量检查
项目 SHALL 通过 husky 和 lint-staged 在 git commit 前自动对变更文件运行 ESLint(含 Prettier 格式)检查。由于 eslint-plugin-prettier 已集成格式检查,lint-staged SHALL 仅运行 eslint --fix 即可同时修复代码质量和格式问题。
Scenario: 变更 TypeScript 文件后提交
- WHEN 开发者 stage 了
.ts或.tsx文件并执行git commit - THEN lint-staged SHALL 自动对变更文件运行
eslint --fix(含格式修复),修复后继续提交
Scenario: 变更 Markdown 或 JSON 文件后提交
- WHEN 开发者 stage 了
.md、.json、.yaml或.yml文件并执行git commit - THEN lint-staged SHALL 自动对变更文件运行
prettier --write
Scenario: lint 检查失败阻止提交
- WHEN 变更文件存在无法自动修复的 ESLint 错误(含格式错误)
- THEN pre-commit hook MUST 以非零状态退出,阻止提交
Scenario: 无变更文件提交
- WHEN 开发者执行
git commit但无 stage 文件 - THEN lint-staged SHALL 正常通过,不阻止提交
Requirement: 提交信息格式校验
项目 SHALL 通过 commitlint 在 git commit 时校验提交信息必须符合 "类型: 简短描述" 格式,类型限定为 feat/fix/refactor/docs/style/test/chore。
Scenario: 有效的中文提交信息
- WHEN 开发者提交信息为 "feat: 新增导入排序功能"
- THEN commit-msg hook SHALL 通过校验
Scenario: 缺少类型前缀的提交信息
- WHEN 开发者提交信息为 "新增导入排序功能"(无 "feat:" 前缀)
- THEN commit-msg hook MUST 以非零状态退出,提示正确格式
Scenario: 无效的提交类型
- WHEN 开发者提交信息使用不在允许列表中的类型(如 "update: 修改配置")
- THEN commit-msg hook MUST 以非零状态退出,提示可用类型
Requirement: husky 初始化自动化
项目 SHALL 通过 prepare 生命周期脚本在 bun install 时自动初始化 husky。
Scenario: 首次安装依赖
- WHEN 开发者运行
bun install - THEN husky SHALL 自动初始化,安装 pre-commit 和 commit-msg hooks
Scenario: 已有 husky 配置时安装
- WHEN 开发者运行
bun install且 husky 已初始化 - THEN husky 初始化 SHALL 跳过,不覆盖已有配置