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

相关推荐
mldong31 分钟前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排1 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60612 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角3 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!3 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰3 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
Interview Aid1123 小时前
Walmart Global Tech SDE 三轮面经|基础、并发、压力面
面试·职场和发展
mayaairi5 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen5 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马6 小时前
AI源码分析:拆解模型底层实现逻辑
前端