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,让你的代码提交更安全、更规范、更高效!

相关推荐
赵庆明老师2 分钟前
webpack打包基本配置
前端·webpack·node.js
偷光18 分钟前
现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践
前端·css·小程序
Blossom.11836 分钟前
人工智能在智能供应链中的创新应用与未来趋势
前端·人工智能·深度学习·安全·机器学习
无限大61 小时前
《计算机“十万个为什么”》之前端与后端
前端·后端·程序员
JuneXcy1 小时前
Vue 核心技术与实战day07
前端·javascript·vue.js
shibin1 小时前
基于axios 二次封装:构建强大的 HTTP 请求层
前端·typescript
xianshenglu1 小时前
我的 Angular 总结:创建一个通用测试模块,简化单元测试
前端·javascript·angular.js
粥里有勺糖1 小时前
视野修炼-技术周刊第121期 | Rolldown-Vite
前端·javascript·github
用户0595661192091 小时前
Java 面试资料中相关代码使用方法及组件封装方法解析
面试
帅夫帅夫1 小时前
四道有意思的考题
前端·javascript·面试