Husky:自动检查代码,提升团队协作效率

Husky 是一个非常轻量且实用的工具,它帮助你在使用 Git 进行代码提交和推送时,自动运行一些自定义的脚本,比如代码格式化、代码检查和测试,保证代码质量,让团队协作更加规范和高效。


什么是 Husky 和 Git Hooks?

  • Git Hooks 是 Git 自带的功能,它允许你在 Git 的某些操作阶段(如提交代码前、推送代码前)自动执行脚本。
  • Husky 是一个工具,帮你更方便地管理和使用这些 Git Hooks。它会在你的项目里创建一个 .husky 文件夹,里面放置各种钩子脚本。这样,团队成员都能用相同的钩子配置,避免每个人手动设置不同的钩子,保证一致性。

Husky 的主要作用

  • 自动运行代码检查:比如在提交前自动运行 ESLint 检查代码风格,或者 Prettier 格式化代码。
  • 自动运行测试:提交或推送代码前自动跑单元测试,防止有错误代码进入仓库。
  • 规范提交信息:检查提交信息是否符合规范,方便后续自动生成变更日志。
  • 减少人为疏忽:自动执行这些任务,避免忘记执行检查导致的问题。
  • 支持多种 Git 钩子 :如 pre-commit(提交前)、pre-push(推送前)、commit-msg(提交信息校验)等。

如何快速开始使用 Husky?

1. 环境准备

  • 需要先安装好 Git(版本推荐 2.9 以上)。
  • 项目已经初始化 Git 仓库(执行 git init)。

2. 安装 Husky

推荐使用一条命令快速安装并初始化:

bash 复制代码
npx husky-init && npm install

这条命令会完成以下工作:

  • 安装 Husky 依赖。
  • 在项目根目录生成 .husky 文件夹。
  • 在 package.json 中添加 "prepare": "husky install" 脚本,确保每次安装依赖时都启用 Husky。
  • 默认生成一个 pre-commit 钩子,里面执行 npm test。

3. 添加和管理钩子

比如你想在每次提交代码前,先运行测试,可以执行:

bash 复制代码
npx husky add .husky/pre-commit "npm test"
git add .husky/pre-commit

这样,每次执行 git commit,都会先运行 npm test,测试失败则阻止提交。

4. 配置测试脚本

确保你的 package.json 中有对应的测试命令,例如:

json 复制代码
"scripts": {
  "test": "echo "测试通过" && exit 0"
}

真实项目中,这里通常是运行单元测试或其他验证脚本。

5. 配合 lint-staged 只检查变更文件(提升效率)

安装 lint-staged:

bash 复制代码
npm install --save-dev lint-staged

在 package.json 中添加配置:

json 复制代码
"lint-staged": {
  "*.js": ["eslint --fix", "prettier --write", "git add"]
}

修改 .husky/pre-commit 文件内容:

text 复制代码
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged

这样,提交时只会针对暂存区(即本次提交的文件)运行格式化和检查,速度更快。

6. 其他常用钩子示例

  • 推送前检查测试:
bash 复制代码
npx husky add .husky/pre-push "npm test"
  • 提交信息校验(结合 commitlint) :
bash 复制代码
npx husky add .husky/commit-msg "npx --no-install commitlint --edit "$1""

代码示例:完整的 Husky + lint-staged 配置

bash 复制代码
# 安装依赖
npm install husky lint-staged eslint prettier --save-dev

# 初始化 husky
npx husky install

# 在 package.json 添加 prepare 脚本
# "prepare": "husky install"

# 添加 pre-commit 钩子,运行 lint-staged
npx husky add .husky/pre-commit "npx lint-staged"

# package.json 配置示例
{
  "scripts": {
    "prepare": "husky install",
    "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
    "format": "prettier --write ."
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write",
      "git add"
    ]
  }
}

这样,每次提交时,Husky 会自动调用 lint-staged,只对改动的 JavaScript/TypeScript 文件运行 ESLint 和 Prettier,自动修复并格式化代码,保证提交的代码整洁规范。


卸载 Husky

如果不再需要 Husky,可以这样卸载:

bash 复制代码
npm uninstall husky
git config --unset core.hooksPath
rm -rf .husky

并从 package.json 中删除 "prepare": "husky install" 脚本。


总结

  • Husky 是管理 Git Hooks 的利器,帮助你在提交和推送代码时自动执行代码检查、格式化和测试。
  • 它极大地减少了人为疏忽,保证代码质量和团队协作效率。
  • 配合 lint-staged 使用,可以只检查改动文件,提升速度和体验。
  • 只需几条命令即可安装配置,适合所有使用 Git 的项目。

用 Husky,让你的代码提交更安全、更规范、更高效!

相关推荐
空中湖21 分钟前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
欣欣之王来了2 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒2 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师2 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端
特立独行的猫A2 小时前
10 MB 的桌面 AI 客户端:用仓颉 + 系统 WebView 替代 Electron
前端·harmonyos
小奏技术2 小时前
为什么 2026 年了,我又写了一个 API 调试工具
github
miofly3 小时前
Kling 4.0 上线 API 调用,支持 30 秒原生音频视频生成
开源·github
修炼的dance3 小时前
白底图存JPG,sharp开mozjpeg背景杂点少近三成
前端
anOnion3 小时前
构建无障碍组件之Grid Pattern
前端·html·交互设计
miofly3 小时前
山东大学研究:代码智能体的复杂 harness 主要提升 token 消耗而非性能
开源·github