Precommit Hook执行Prettier时意外处理未指定目录问题
问题解决思路
你的问题出在lint-staged规则和prettier脚本的逻辑不匹配:
核心问题分析
你配置的lint-staged规则是匹配所有目录下的js/json文件(**/*.{js,json}),然后执行prettier:fix脚本。尽管脚本里指定了backend目录,但这里存在两个关键问题:
npm run执行脚本时不会自动接收lint-staged传递的修改文件列表,导致每次触发都会格式化整个backend目录;- 如果你发现
frontend文件被格式化,大概率是你的prettier全局配置(比如.prettierrc或忽略文件)没有排除frontend,或者你误解了执行结果——实际是每次都格式化backend,而非frontend。
正确配置方案
方案一:分目录配置lint-staged规则
让lint-staged只对backend目录的文件执行prettier格式化,frontend文件不触发该操作:
"lint-staged": { "backend/**/*.{js,json}": [ "npm run prettier:fix", "git add" ], "frontend/**/*.{js,json}": [ "git add" ] }
方案二:让prettier只处理修改的文件
修改prettier:fix脚本,接收lint-staged传递的文件参数,这样只会格式化提交时修改的backend文件,效率更高:
- 更新prettier脚本:
"prettier:fix": "npx prettier --write"
- 调整lint-staged规则,仅匹配
backend文件:
"lint-staged": { "backend/**/*.{js,json}": [ "npm run prettier:fix", "git add" ] }
额外排查点
如果还是出现不符合预期的格式化,检查:
.prettierignore文件是否正确排除了frontend目录(添加frontend/即可);prettier配置文件中的include字段是否意外包含了frontend。
内容的提问来源于stack exchange,提问作者Saad Farooq
相关产品推荐
相关产品推荐

