了解 .husky:前端项目中的 Git Hooks 工具

在日常开发中,我们经常会遇到这样的问题:

  • 团队成员提交的代码风格不一致(缩进、引号、分号)。
  • 有些低级错误(如 console.log、未使用的变量)混入了提交。
  • 提交信息随意,难以追踪。

这些问题会导致代码库质量下降、协作成本增加。

Husky 就是为了解决这些问题的工具。


1. 什么是 Husky?

Husky 是一个 Git Hooks 工具,能让你在 Git 操作的不同阶段(如 commitpush)执行脚本。

Git Hooks 本来就存在,但原生配置麻烦。Husky 简化了这一过程,让我们只需要在 .husky/ 目录下放置对应的脚本即可。

常见的 Git Hooks

  • pre-commit:在提交前触发,常用于代码检查(lint、test)。
  • commit-msg:在提交信息时触发,用于校验提交信息格式。
  • pre-push:在 push 之前触发,用于运行测试或构建。

2. .husky 目录长什么样?

一个典型的 Vue 或 React 项目中可能有这样的目录:

bash 复制代码
.husky/
 ├── pre-commit      # 提交前执行,比如 eslint 检查
 ├── commit-msg      # 校验提交信息

每个文件就是一个 Hook 脚本,例如 pre-commit

bash 复制代码
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run lint

意思是:在提交前,先执行 npm run lint

如果检查不过,提交会被中断。


3. 如何安装和使用 Husky?

步骤 1:安装依赖

css 复制代码
npm install husky --save-dev

步骤 2:启用 Git Hooks

复制代码
npx husky install

这会在项目根目录生成 .husky/ 文件夹。

步骤 3:添加 Hook

例如添加一个 pre-commit

sql 复制代码
npx husky add .husky/pre-commit "npm run lint"

这样每次 git commit 时都会执行 npm run lint


4. 常见配合工具

Husky 本身只是运行脚本的工具,通常会配合其他工具使用:

  • ESLint + Prettier

    格式化和检查代码,保证风格统一。

    sql 复制代码
    npx husky add .husky/pre-commit "npx lint-staged"

    配合 lint-staged 只检查改动过的文件,提高效率。

  • Commitlint

    检查提交信息是否符合规范(如 Angular 提交规范)。

    .husky/commit-msg 里写:

    bash 复制代码
    npx commitlint --edit $1
  • 测试工具(Jest、Vitest 等)

    可以在提交或推送前运行测试,防止错误进入主分支。


5. 优点和注意事项

优点

  • 保证代码质量:提交前自动检查。
  • 提交记录更规范:易于追踪和生成 changelog。
  • 自动化:减少人为疏漏。

注意事项

  • 不要把 Hook 脚本写得太重,否则会拖慢提交流程。
  • 如果只需要检查改动的文件,最好结合 lint-staged
  • .husky/ 目录需要提交到仓库,否则其他开发者不会生效。

6. 总结

.husky 是现代前端项目中常用的工具,用来结合 Git Hooks 管理代码质量。

  • 个人项目 :可以简化,甚至删除 .husky,保持轻量。
  • 团队项目:推荐保留,并结合 ESLint、Prettier、Commitlint 一起使用。

一句话总结:

👉 Husky 并不会影响代码运行,它只是为团队的"提交环节"加了一道保险

相关推荐
ze_juejin2 小时前
前端发送语音方式总结
前端
给月亮点灯|2 小时前
Vue3基础知识-Hook实现逻辑复用、代码解耦
前端·javascript·vue.js
Simon_He2 小时前
一款适用于 Vue 的高性能流式 Markdown 渲染器,源自我们的 AI 聊天机器人
前端·vue.js·markdown
想当花匠的小码农2 小时前
Git 仓库“减肥”指南:从检测、清理到同步的全流程实践
git
顽强d石头2 小时前
v-model与.aync的区别
前端·javascript·vue.js
Hilaku2 小时前
我为什么认为 CSS-in-JS 是一个失败的技术?
前端·css·前端框架
月下点灯2 小时前
✨项目上线后产品要求把应用字体改大点📏怎么办?一招教你快速解决🔧
前端·vite
xvmingjiang2 小时前
Vue 3 中监听多个数据变化的几种方法
前端·javascript·vue.js
我有一只臭臭2 小时前
ES5 和 ES6 类的实现
前端·javascript·es6