WebStorm 未触发 husky 的根本原因是 husky 未正确注册到 .git/hooks/,常见于未运行 npx husky install、项目未 git init、WebStorm 使用内置 Git 但找不到 Node、Node 版本不兼容(如 husky v8+ 需 ≥16.14),或 Vite 项目缺少手动配置 prepare 脚本及钩子添加。

WebStorm 为什么根本没触发 husky?
因为 WebStorm 本身不“运行” husky,它只调用 git commit 这类命令;真正执行钩子的是 Git + husky 的组合。如果提交时没反应,90% 是 husky 根本没注册进 .git/hooks/。
常见卡点:
-
npx husky install没运行,或运行后没生成.husky/目录(检查项目根目录是否存在该文件夹) - 项目还没
git init,husky 安装会静默跳过(终端输出Skiping Git hooks installation) - WebStorm 使用了内置 Git,但该 Git 找不到 Node —— 去
Settings > Version Control > Git > Path to Git executable改成系统 Git 绝对路径,比如/usr/local/bin/git或C:\Program Files\Git\bin\git.exe - Node 版本不兼容:husky v8+ 要求 Node ≥ 16.14,v9+ 要求 ≥ 18.12;用
node -v确认,别信 nvm alias
pre-commit 钩子写了却没格式化代码?
典型表现是:改了 .ts 文件,git commit 成功了,但 ESLint/Prettier 根本没跑 —— 很可能 lint-staged 配置和实际文件类型不匹配。
检查这几点:
-
lint-staged配置里是否包含"*.ts"、"*.vue"等真实扩展名?光写"*.js"对 TypeScript 项目无效 - 用的是
prettier --write吗?对.vue文件需额外装prettier-plugin-vue并在.prettierrc中启用 - ESLint 是否返回非零退出码?比如报 error 且没加
--quiet,会导致整个 hook 中断;WebStorm 提交窗口只显示Commit failed,看不到具体错误 - 升级到 lint-staged v15+ 后,删掉配置里手动写的
git add—— v10 起已自动暂存,留着会报 warning 或重复添加
WebStorm 提交失败,怎么快速看到真实错误?
WebStorm 的图形化提交窗口默认隐藏钩子输出,没法 debug。必须切到终端看完整日志。
操作步骤:
- 打开 WebStorm 终端(
Alt+F12) - 执行
git commit -m "test"(不要用 IDE 窗口点提交) - 观察输出:常见错误如
Cannot find module 'eslint'(本地没装或没--save-dev)、Failed to load plugin 'react'(插件版本不匹配)、prettier: command not found(PATH 或全局安装问题) - 如果报
husky - pre-commit hook failed,说明脚本执行了但某条命令退出码非 0,重点看上一行的工具报错
Vue3/Vite 项目 husky 不生效的特殊原因
Vue CLI 项目能靠 gitHooks 字段自动注入,但 Vite 项目不行——它不接管 package.json 的钩子字段,也不自带 yorkie。
所以你得手动补全两步:
- 确保
package.json有"prepare": "husky install",然后运行npm run prepare(不是npm install自动触发,尤其 CI 环境) - 手动创建钩子文件:
npx husky add .husky/pre-commit "npx lint-staged",注意引号要闭合,$1要加双引号包裹,否则commit-msg会解析失败 - 检查
.git/hooks/pre-commit是否是可执行文件(chmod +x),Windows 用户留意换行符是否为 LF(不是 CRLF)
最易忽略的一点:Vite 项目常把 lint-staged 配置写在 package.json 里,但新版 lint-staged 默认只读 .lintstagedrc 或 lint-staged.config.js,JSON 格式支持已降级为“仅当无其他配置时 fallback”,务必确认加载的是你改的那个文件。


















