← 中文资源

简体中文版本

添加提交前 Lint 与测试钩子

使用 pre-commit 框架在每次提交前运行 lint 与快速测试,把配置纳入仓库,避免依赖个人手动检查。

阅读英文原文

为什么使用仓库级钩子

只存在于某位开发者 .git/hooks 中的钩子对其他人不可见。pre-commit 框架把配置保存在仓库中、固定版本,并在每个克隆中安装钩子。

repos:
  - repo: local
    hooks:
      - id: lint
        name: lint
        entry: npm run lint
        language: system
        pass_filenames: false
      - id: unit-tests
        name: unit tests
        entry: npx vitest run --changed
        language: system
        pass_filenames: false

步骤

  1. 在每台机器上安装框架:pipx install pre-commit。
  2. 在仓库根目录创建 .pre-commit-config.yaml,用 local hook 调用项目自己的脚本和锁定的包管理器。
  3. 执行 pre-commit install && pre-commit run --all-files 建立基线。
  4. 故意引入一个 lint 错误并尝试提交,确认钩子会阻止提交并显示失败原因。

验证

  • 有 lint 错误的提交被拒绝。
  • 干净的提交无需 --no-verify 即可通过。
  • 另一位开发者克隆仓库并执行 pre-commit install 后得到相同检查。
  • CI 仍运行同一组脚本;钩子只是快速本地过滤,不替代 CI。

范围与限制

保持钩子快速:格式化、lint、类型检查和单元测试适合放在钩子中;端到端、性能与集成测试留在 CI。钩子可以通过 --no-verify 绕过,因此 CI 必须保留权威门禁。如果钩子自动修复文件,需要重新暂存后再提交。