lint-staged 与 pre-commit 从零搭建
1. 最终项目结构
先准备成下面这个结构。
需要新建或修改的文件:
package.jsonlint-staged.config.mjscommitlint.config.mjs.husky/pre-commit.husky/commit-msg
2. 安装依赖
项目根目录执行:
如果项目里已经有 eslint、prettier、stylelint,把重复的去掉即可。
3. 初始化 Husky
执行后会自动做两件事:
- 创建
.husky/ - 在
package.json里写入prepare脚本
如果你的 package.json 里还没有 prepare,手动补上:
4. 修改 package.json
把下面这段合并进去:
说明:
cm:统一触发交互式提交commitizen.path:指定cz-git作为 adapter
不要把脚本名写成 commit,直接用 cm。
5. 新建 lint-staged.config.mjs
文件:lint-staged.config.mjs
如果项目不用 stylelint 或没有 vue/scss/less,删掉对应后缀和命令。
6. 新建 commitlint.config.mjs
文件:commitlint.config.mjs
这份配置同时服务两件事:
commitlint校验提交信息cz-git读取prompt配置- 直接提供中文交互模板,可直接复制使用
7. 写 Hook 文件
7.1 .husky/pre-commit
文件:.husky/pre-commit
7.2 .husky/commit-msg
文件:.husky/commit-msg
如果你是在 macOS / Linux 下手动创建这两个文件,再执行:
8. 直接可用的最终配置
8.1 package.json
只看本方案相关字段,最终至少要有:
8.2 lint-staged.config.mjs
8.3 commitlint.config.mjs
8.4 .husky/pre-commit
8.5 .husky/commit-msg
9. 提交时怎么用
先暂存文件:
再走交互式提交:
执行流程:
commitizen启动交互输入cz-git生成提交信息pre-commit执行lint-stagedcommit-msg执行commitlint- 全部通过后提交成功
如果你全局安装了 commitizen,也可以直接用:
10. 验证
按下面顺序检查:
10.1 验证 Hook 文件
应看到:
pre-commitcommit-msg
10.2 验证 lint-staged
随便改一个 js/ts/md 文件,执行:
能正常格式化或校验即可。
10.3 验证 commitlint
执行一条错误提交信息:
应被 commitlint 拦截。
10.4 验证 commitizen + cz-git
执行:
能看到交互式提交流程即可。
11. 推荐日常用法
团队直接约定这一套:
不要约定成:
原因:
pnpm run cm有交互式向导commitlint仍然负责兜底- 新人不用背提交规范

