为什么安装了prettier的husky hook后提交还是没格式化?
刚给项目配了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属性?
1. 先确认husky确实装对了。运行
cat .git/hooks/pre-commit看看有没有husky的hook脚本。如果没有,说明husky安装有问题,试试重新初始化:2. 检查lint-staged的匹配模式,性能上建议把glob模式改成具体的,比如
"src/**/*.{js,css}"。有时候太简单的模式匹配不到文件。3. 确保你的文件确实在git暂存区。改完文件后要
git add才会触发hook。4. 可以在lint-staged配置里加个debug看看:
如果还不行,八成是husky版本问题。新版本husky(v7+)配置方式变了,要改在.husky目录下直接放hook文件。建议卸载重装:
最后记得检查.gitignore有没有意外排除.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查看一下路径对不对。