🐾 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 命令时自动运行。具体来说:
-
自动代码检查:在每次提交代码前,自动运行代码检查工具(如 ESLint、Prettier 等)来确保代码质量。
-
防止低质量问题提交:如果代码检查失败(例如有语法错误、代码风格问题等),提交会被中断,直到问题解决。
-
自动化格式化:可以自动格式化代码,确保团队成员提交的代码风格一致。
在您的项目中,.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 钩子的功能包括:
-
提交信息格式验证:检查提交信息是否符合预设的格式规范,比如是否遵循 Conventional Commits 规范(如
feat: 新增功能、fix: 修复bug等)。 -
强制规范化提交:确保团队成员使用统一的提交信息格式,便于后续自动生成 CHANGELOG、计算版本号等。
-
阻止不合规提交:如果提交信息不符合规范,会中断提交过程,要求修改提交信息。
例如,一个典型的 commit-msg 钩子可能包含:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx --no-install commitlint --edit "$1"
这个脚本会使用 commitlint 工具来验证提交信息是否符合规范。常见的规范包括:
feat: 添加新功能fix: 修复 bugdocs: 文档更新style: 代码格式调整refactor: 重构代码test: 添加测试chore: 构建工具或辅助工具变动
这样可以确保项目的历史提交记录清晰、有序,便于团队协作和自动化工具处理。
可以通过以下命令添加:
npx husky add .husky/commit-msg "npx --no-install commitlint --edit \$1"