为什么安装了prettier的husky hook后提交还是没格式化?

司徒兴瑞 阅读 33

刚给项目配了husky + prettier的pre-commit钩子,但每次提交代码都没触发格式化。已经按文档装了husky、prettier、lint-staged,package.json里配置了:


"husky": {
  "hooks": {
    "pre-commit": "lint-staged"
  }
},
"lint-staged": {
  "*.{js,css}": ["prettier --write"]
}

提交时控制台连提示都没有,文件也没变化。试过删除node_modules重装,甚至把prettier命令改成npm脚手架调用,还是不行。是不是和git版本有关?或者需要额外配置git属性?

我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
Air-美美
这个问题我遇到过好几次了,每次都能把人逼疯。重点检查这几个地方:

1. 先确认husky确实装对了。运行 cat .git/hooks/pre-commit 看看有没有husky的hook脚本。如果没有,说明husky安装有问题,试试重新初始化:

npx husky install
npx husky add .husky/pre-commit "npx lint-staged"


2. 检查lint-staged的匹配模式,性能上建议把glob模式改成具体的,比如 "src/**/*.{js,css}"。有时候太简单的模式匹配不到文件。

3. 确保你的文件确实在git暂存区。改完文件后要 git add 才会触发hook。

4. 可以在lint-staged配置里加个debug看看:
"lint-staged": {
"*.{js,css}": [
"echo 'lint-staged is running'",
"prettier --write --list-different"
]
}


如果还不行,八成是husky版本问题。新版本husky(v7+)配置方式变了,要改在.husky目录下直接放hook文件。建议卸载重装:

npm uninstall husky
npm install husky@7 --save-dev
npx husky install


最后记得检查.gitignore有没有意外排除.husky目录。这种配置问题最烦人了,但搞定了就一劳永逸。
点赞
2026-03-08 13:08
令狐雨妍
你这个问题我遇到过,确实有点坑。首先你的配置看起来是没问题的,但问题可能出在husky的版本上。新版本的husky改了配置方式,已经不认你这种写法了。

现在你需要做的是把husky初始化一下,用命令 npx husky-init 跑一遍,这会在项目根目录生成一个.husky文件夹。然后打开里面的pre-commit文件,把内容改成 npx lint-staged

另外提醒一下,现在的git确实需要手动允许钩子执行,你得确保项目的.git目录下有hooks文件夹,没有的话就自己建一个。还有就是检查下node版本,最好用16以上的,太老的版本可能会有问题。

最后别忘了给package.json加个prepare脚本:"prepare": "husky install",这样能保证每次安装依赖后钩子都能正常注册。

这些都弄完再试试提交,应该就能触发格式化了。要是还不行,可能是你本地的git配置禁用了钩子,可以用 git config core.hooksPath 查看一下路径对不对。
点赞 7
2026-02-19 12:34