Husky pre-commit钩子提交后才执行?如何让其在提交前完成格式化
解决 Husky Pre-Commit 钩子格式化代码未纳入提交的问题
问题核心是 lint:fix 执行后,修改的文件并未被重新加入暂存区,导致提交的仍是格式化前的版本,格式化后的变更留在工作区。以下是两种可行解决方法:
方法一:直接在钩子中补充暂存步骤
修改 .husky/pre-commit 文件,在 lint:fix 后添加 git add 命令,将格式化后的文件重新暂存:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" npm run lint:fix git add --update
注:
git add --update仅暂存已跟踪文件的修改,避免意外纳入未准备提交的新增文件;若需包含所有变更,可改用git add .
方法二:使用 lint-staged(推荐)
该方式仅对已暂存的文件执行格式化,更高效且避免修改无关文件:
- 安装依赖:
npm install lint-staged --save-dev
- 在
package.json中添加lint-staged配置:
{ "scripts": { "lint": "next lint", "lint:fix": "next lint --fix" }, "lint-staged": { "**/*": "next lint --fix" }, "devDependencies": { "eslint": "8.10.0", "eslint-config-next": "12.1.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "husky": "^7.0.4", "lint-staged": "^13.0.0" } }
- 更新
.husky/pre-commit文件:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" npx lint-staged
lint-staged 会自动对暂存文件执行格式化,并将修改后的文件重新暂存,确保格式化后的代码被包含在本次提交中。
内容的提问来源于stack exchange,提问作者Kwekel
相关产品推荐
相关产品推荐

