工程效率与质量 / 入门
Pre-commit Hook 怎么配才不惹人关:只检查这次改动
把快速、确定的检查前移到本地,同时把完整验证留给 CI,兼顾反馈速度与质量门禁。
Hook 只做能快速完成的事
提交前适合运行格式化、暂存文件 lint 和轻量静态检查,不适合执行完整构建或全量 E2E。等待时间一旦不可预测,开发者就会开始使用 --no-verify,门禁也随之失效。
EXAMPLE / 01Git Hooks
{
"lint-staged": {
"*.{ts,tsx}": ["eslint --fix --max-warnings=0", "prettier --write"],
"*.{json,md,yml}": ["prettier --write"]
}
}自动修复后要正确更新暂存区
lint-staged 会把工具修改后的文件重新加入暂存区,并保护未暂存改动。不要在脚本里自行 git add .,否则可能把开发者不打算提交的内容一起带入。对部分暂存的大文件尤其要测试行为。
Hook 和 CI 应调用 package.json 中相同的 lint 命令,避免本地规则与流水线规则慢慢分叉。
CI 才是最终门禁
本地 Hook 可能没安装,也可以被跳过,因此 CI 必须重新运行完整检查。记录 Hook 的 P95 耗时,目标控制在几秒内;新增检查前先评估它对每次提交的成本。
首次安装后自动配置 Hook;失败信息包含可直接执行的修复命令;提交前检查通常在 5 秒内结束;CI 独立执行完整质量检查。