Angular 13中lint-staged提交全量lint耗时久,如何仅检查暂存文件?
这个问题我之前在Angular项目里也碰到过!核心原因就是你现在的lint-staged配置直接调用了全量检查的npm run lint:fix,而没有让ESLint只处理暂存的文件。咱们一步步调整就能解决卡顿问题:
解决步骤
1. 调整lint-staged配置,直接调用ESLint处理暂存文件
打开你的package.json,找到lint-staged字段,把原来调用npm run lint:fix的配置替换成直接调用ESLint命令,让lint-staged自动把暂存的文件列表传给它。同时保留prettier的格式化操作:
"lint-staged": { "*.{ts,html}": [ "eslint --fix", "prettier --write" ] }
为什么这么改?因为你之前配置的npm run lint:fix应该是全量检查命令(比如ng lint --fix),它会遍历整个应用和所有库的文件。而直接用eslint --fix的话,lint-staged会精准传递暂存文件的路径,让ESLint只处理这些变更的文件,速度会大幅提升。
2. 确保husky钩子正确调用lint-staged
检查你的.husky/pre-commit钩子文件,确保它是调用npx lint-staged,而不是直接执行全量的lint命令。正确的钩子内容应该是:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npx lint-staged
3. 多库项目的进阶优化(可选)
如果你的各个Angular库有独立的ESLint配置文件(比如.eslintrc.lib1.json、.eslintrc.lib2.json),可以给不同路径的文件指定对应的配置,确保lint规则准确适配每个库:
"lint-staged": { "projects/app/src/**/*.{ts,html}": [ "eslint --fix --config .eslintrc.app.json" ], "projects/lib1/src/**/*.{ts,html}": [ "eslint --fix --config .eslintrc.lib1.json" ], "projects/lib2/src/**/*.{ts,html}": [ "eslint --fix --config .eslintrc.lib2.json" ], "*.{ts,html}": [ "prettier --write" ] }
4. 验证效果
修改几个文件并用git add暂存,然后手动执行npx lint-staged,你会看到它只处理你暂存的文件,而不是遍历整个项目。之后再提交代码,就不会出现长时间卡顿的情况了。
内容的提问来源于stack exchange,提问作者afriedman111
相关产品推荐
相关产品推荐

