setup-pre-commit
在当前仓库中设置 Husky pre-commit 钩子,并配置 lint-staged(Prettier)、类型检查和测试。当用户希望添加 pre-commit 钩子、设置 Husky、配置 lint-staged,或添加提交时的格式化、类型检查和测试时使用。
Setup Pre-Commit - 一键配置 Husky 提交前检查钩子
技能概述
Setup Pre-Commit 为当前仓库自动配置 Husky pre-commit 钩子,集成 lint-staged 与 Prettier 格式化暂存文件,并在提交前运行类型检查和测试。
适用场景
-
团队协作统一代码风格:多人开发时每个人的编辑器和格式化习惯不同,用 pre-commit 钩子在提交环节自动跑 Prettier,只处理本次改动的暂存文件,不需要全量格式化历史代码,也不会有"格式化提交"污染提交记录。
-
老项目接入提交前检查:仓库里还没有任何 Git hooks,想一次性把格式化、类型检查、测试三道关卡加在 commit 之前,避免明显有问题的代码进入主干。
-
TypeScript 项目防止类型错误入库:把
typecheck和test脚本挂到钩子上,提交前自动执行,比等到 CI 阶段才发现失败要早得多。
核心功能
-
Husky 初始化与钩子创建:执行
npx husky init创建.husky/目录并写入prepare: "husky"脚本,然后生成.husky/pre-commit文件。Husky v9 及以上版本的钩子文件不需要 shebang。 -
lint-staged + Prettier 格式化暂存文件:生成
.lintstagedrc配置"*": "prettier --ignore-unknown --write",只对本次 staged 的文件跑格式化。--ignore-unknown会跳过 Prettier 无法解析的文件(图片等),避免报错中断提交。若仓库缺少 Prettier 配置,会补一份默认的.prettierrc(2 空格缩进、80 列宽、双引号、ES5 尾逗号、带分号);已有配置则保持不动。 -
自动识别包管理器并适配命令:检测
package-lock.json、pnpm-lock.yaml、yarn.lock、bun.lockb判断使用 npm、pnpm、yarn 还是 bun,钩子里的命令会替换成对应的包管理器。若 package.json 里没有typecheck或test脚本,会省略对应行并明确告知,而不是写进去等着报错。
常见问题
pre-commit 钩子会让每次提交变慢吗?
lint-staged 只对暂存区文件跑 Prettier,通常很快。真正耗时的是后面的完整 typecheck 和 test,它们作用于整个项目。技能把 lint-staged 放在第一步,格式化和类型检查的报错能尽早暴露,但项目测试套件很大时提交等待会明显变长——这种情况下可以只保留格式化,把测试交给 CI。
项目里没有 typecheck 或 test 脚本怎么办?
技能会检查 package.json,缺失的脚本对应的行会直接从 .husky/pre-commit 中省略,并告知你少了哪一条。钩子不会因为引用了不存在的脚本而失败。需要的话可以先补上脚本再重新配置。
支持 pnpm、yarn、bun 吗?已有的 Prettier 配置会被覆盖吗?
支持。技能通过 lockfile 自动识别 npm、pnpm、yarn、bun,锁文件都没找到时默认用 npm,钩子内的命令会同步替换。Prettier 配置只在仓库完全没有时才会创建 .prettierrc,已有配置不会被覆盖。注意 .lintstagedrc 和 .husky/pre-commit 属于技能直接写入的文件,如果仓库里已存在同名文件需要留意。
配好之后怎么确认真的生效?
按技能内的检查项逐条核对:.husky/pre-commit 存在且有可执行权限、.lintstagedrc 存在、package.json 的 prepare 是 "husky"、Prettier 配置存在,并手动跑一次 npx lint-staged。最后技能会把改动提交一次,这次提交本身就会触发新钩子,相当于一次真实的冒烟测试。日常想临时跳过检查,可以用 git commit --no-verify。