统一开发规范--Git hooks工具库——husky

136 阅读3分钟

🐾 Husky 是什么?

Husky 是一个用于 管理 Git 钩子(Git hooks) 的 JavaScript 工具。它允许你在执行 Git 操作(如 commit、push 等)时自动运行自定义脚本,比如: 提交前检查代码格式(lint) 运行单元测试 阻止不符合规范的提交

它的目标是 提升代码质量、统一团队开发规范、防止低级错误进入仓库。

✅ 为什么在 Vue 3 项目中使用 Husky?

在现代前端工程化项目(如 Vue 3 + Vite + TypeScript)中,通常会配合以下工具链: ESLint:代码规范检查 Prettier:代码格式化 lint-staged:只对暂存文件(staged files)运行 lint Husky:在 Git 提交阶段触发上述检查

通过 Husky,可以确保: “任何提交到 Git 的代码都必须通过 lint 和测试”,避免污染主分支或远程仓库。

🛠️ 在 Vue 3 项目中如何配置 Husky?

当前环境:node.js为16.20.2 pnpm为8.15.9 第一步:安装依赖

bash pnpm install husky@^8.0.3 --save-dev pnpm install lint-staged@^13.3.0 --save-dev

第二步:启用 Husky

bash npx husky install 这会在项目根目录生成 .husky/ 文件夹。 第三步:添加钩子(例如 pre-commit)

bash npx husky add .husky/pre-commit "npx lint-staged" 第四步:配置 lint-staged

在 package.json 中添加:

{
  "lint-staged": {
    "*.{js,ts,vue}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}

这样每次 git commit 时,只会格式化和检查你本次修改的文件。 第五步(可选):自动启用 Husky(推荐)

在 package.json 的 scripts 中加入:

{
  "scripts": {
    "prepare": "husky install"
  }
}

这样其他开发者执行 npm install 后会自动启用 Husky 钩子。

💡 小贴士

注意 Husky 和 lint-staged的版本 Husky v7+ 要求 Node.js ≥ 14。

husky常用的两个git钩子脚本

一、.husky/pre-commit

.husky/pre-commit 文件是一个 Git 钩子脚本,它的主要作用是在您执行 git commit 命令时自动运行。具体来说:

  1. 自动代码检查:在每次提交代码前,自动运行代码检查工具(如 ESLint、Prettier 等)来确保代码质量。

  2. 防止低质量问题提交:如果代码检查失败(例如有语法错误、代码风格问题等),提交会被中断,直到问题解决。

  3. 自动化格式化:可以自动格式化代码,确保团队成员提交的代码风格一致。

在您的项目中,.husky/pre-commit 文件包含以下内容:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged

这意味着在每次提交前,会运行 lint-staged 命令,它只会检查和修复那些被暂存(staged)的文件,而不是整个项目的所有文件。

这种机制有助于:

  • 确保只有符合代码规范的代码才能被提交
  • 保持代码库的一致性
  • 在早期发现问题,避免在后续流程中出现更多问题
  • 自动格式化代码,减少代码审查时的风格争议

二、.husky/commit-msg

.husky/commit-msg 是另一个 Git 钩子脚本,它的作用是在您提交代码时检查提交消息(commit message)的格式。

具体来说,commit-msg 钩子的功能包括:

  1. 提交信息格式验证:检查提交信息是否符合预设的格式规范,比如是否遵循 Conventional Commits 规范(如 feat: 新增功能fix: 修复bug 等)。

  2. 强制规范化提交:确保团队成员使用统一的提交信息格式,便于后续自动生成 CHANGELOG、计算版本号等。

  3. 阻止不合规提交:如果提交信息不符合规范,会中断提交过程,要求修改提交信息。

例如,一个典型的 commit-msg 钩子可能包含:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx --no-install commitlint --edit "$1"

这个脚本会使用 commitlint 工具来验证提交信息是否符合规范。常见的规范包括:

  • feat: 添加新功能
  • fix: 修复 bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 重构代码
  • test: 添加测试
  • chore: 构建工具或辅助工具变动

这样可以确保项目的历史提交记录清晰、有序,便于团队协作和自动化工具处理。

可以通过以下命令添加:

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