守门员:基于 Git Hooks 的全自动化规范体系

6 阅读3分钟

一、 为什么要建立“守门员”机制?

多人协作的项目中,如果缺乏强制手段,往往会出现:

  1. 风格各异: 有人用单引号,有人用双引号;有人缩进 2 格,有人缩进 4 格。
  2. 脏代码入库: 包含 console.log、未定义变量或临时测试代码被提交。
  3. Commit 信息混乱: “fix”、“update”、“111” 这种毫无意义的提交记录让版本回溯变成噩梦。

Git Hooks 就是 Git 在特定事件(如 commitpush)发生前触发的脚本,它是实现自动化校验的天然关卡。


二、 核心组件:打造你的防线

我们要构建的这套体系由三个核心工具组成:

1. Husky:Git Hooks 的“管理员”

Git 默认的 hooks 存储在 .git/hooks 目录下,该目录不会被提交到仓库。Husky 的作用就是将 hooks 脚本与项目配置关联,并同步给团队中的每一个成员。

2. lint-staged:精准打击

如果项目有上千个文件,每次 commit 都全量校验会慢得令人发指。lint-staged 的核心价值在于:只校验本次提交(Git Staged)的文件,实现秒级反馈。

3. Commitlint:规范信息的“审计师”

强制要求提交信息遵循 Angular 规范,例如:feat: 增加用户登录功能fix: 修复首页闪屏问题


三、 实战演练:5 分钟搭建全自动体系

第一步:安装核心依赖

Bash

pnpm add husky lint-staged @commitlint/config-conventional @commitlint/cli -D

第二步:初始化 Husky

执行以下命令开启 Husky,并添加一个 pre-commit 钩子:

Bash

npx husky install
npx husky add .husky/pre-commit "npx lint-staged"

第三步:配置 lint-staged

package.json 中配置针对不同文件的校验逻辑:

JSON

"lint-staged": {
  "*.{js,ts,vue,jsx,tsx}": [
    "eslint --fix",
    "prettier --write"
  ],
  "*.{scss,css,less}": [
    "stylelint --fix"
  ]
}

第四步:配置 Commit 信息校验

创建 .husky/commit-msg 钩子,并在项目根目录新建 commitlint.config.js

JavaScript

// commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'] };

在钩子中关联:

Bash

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

四、 进阶:全栈视角下的规范共享

作为一名资深工程师,你应该考虑如何在多个项目或 Monorepo 架构中复用这些能力。

  1. 共享配置包: 将 ESLint、Prettier、Stylelint 的配置封装成一个 npm 包(例如 @your-team/config),各个项目只需一键引用,避免配置地狱。
  2. CI 最后的防线: 虽然本地有 Git Hooks,但开发者仍可以通过 --no-verify 绕过校验。因此,必须在 GitHub ActionsGitLab CI 中配置相同的校验流程,作为最后的兜底。

💡 给前端开发者的硬核贴士

  • 不要过度约束: 规范是为了提效,如果配置了过于严苛的规则(比如连注释格式都要管),会打击开发者的积极性。建议从“错误预防”开始,逐步迭代到“风格统一”。
  • 自动化修复是关键: 尽量配置 eslint --fix。守门员不应该只说“你错了”,而应该说“我已经帮你改好了,下次注意”。

结语

基于 Git Hooks 的全自动化体系,将团队协作从“人为口头约定”进化到了“机器自动契约”。它不仅保护了代码库的纯净,更节省了 Code Review 中大量关于格式问题的口水仗。