推荐使用 Husky 配置 pre-commit 钩子:安装 husky,运行 npx husky install 启用,再用 npx husky add 添加命令如 "npm run lint && npm run test",提交时自动执行并中断失败任务。

在 JavaScript 项目中,让 npm 在 Git 提交前自动执行检查或格式化,核心不是 npm 本身直接支持 Git 钩子,而是通过工具链把 npm 脚本和 Git 的 pre-commit 钩子绑定起来。常用且推荐的方式是使用 Husky 或 pre-commit(注意:这个 pre-commit 是 npm 包名,不是 Git 钩子名),它们都依赖于 npm scripts 来定义要运行的任务。
用 Husky 配置 pre-commit 钩子(主流推荐)
Husky 是目前最活跃、文档最完善、兼容性最好的 Git 钩子管理工具,尤其适合现代 npm 项目。
- 安装 Husky:
npm install --save-dev husky - 启用钩子系统:
npx husky install(这会在项目中创建.husky/目录) - 添加 pre-commit 钩子:
npx husky add .husky/pre-commit "npm run lint && npm run test" - 确保
package.json中有对应脚本,例如:
"scripts": {
"lint": "eslint .",
"test": "jest --passWithNoTests"
}
之后每次执行 git commit,Husky 就会自动运行你指定的 npm 脚本。任意一个失败,提交就会被中止。
用 pre-commit 包(轻量级替代方案)
如果你倾向更简单、不引入额外目录结构的方案,pre-commit npm 包可自动配置 Git 钩子文件,无需手动管理 .husky/。
立即学习“Java免费学习笔记(深入)”;
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 安装:
npm install --save-dev pre-commit - 在
package.json中配置:
"pre-commit": ["lint", "test"],
"scripts": {
"lint": "eslint .",
"test": "jest"
} - 安装后它会自动写入
.git/hooks/pre-commit,后续提交即生效
注意:该包已多年未更新,对较新 Node.js 版本或复杂工作流支持有限,适合小项目或快速验证。
利用 npm 生命周期钩子辅助(非 Git 钩子,但常被混淆)
npm 自带的 pretest、postbuild 等是 npm 命令内部的执行顺序控制,不是 Git 提交触发的。例如:
-
"pretest": "npm run lint"表示:每次运行npm test时,先执行 lint - 但它不会在
git commit时自动触发——除非你把npm test显式写进 Husky 或 pre-commit 的命令里
所以这类钩子不能单独实现“提交前自动执行”,必须配合 Git 钩子工具使用。
顺便提一句:自动格式化代码(如 Prettier)
如果目标是提交前自动格式化而非仅检查,可在 Husky 的 pre-commit 中加入格式化命令:
- 安装:
npm install --save-dev prettier - 在
.husky/pre-commit中写:npx prettier --write "src/**/*.{js,ts,jsx,tsx}" && npm run lint && npm run test - 建议加上
--list-different模式做只检查不修改(CI 场景更安全)

















