You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在存在ESLint错误时阻止Git Push?(基于Husky+lint-staged)

问题修复方案

核心问题分析

你的配置存在两个关键问题:

  1. lint-staged 未针对暂存文件做ESLint检查:当前npm run lint会扫描整个src目录,而非仅检查你暂存的变更文件,导致暂存的错误可能被忽略,完全没发挥lint-staged的作用。
  2. 检查时机滞后:仅在pre-push阶段跑lint-staged,应该提前到pre-commit阶段,让开发者在提交代码时就发现错误,而非等到推送环节才拦截。

修复步骤

1. 修正 .lintstagedrc 配置

把全量ESLint调用改成针对暂存文件的检查,同时调整prettier和ESLint的执行顺序(先格式化再做lint检查):

{
  "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
    "prettier --write"
  ],
  "src/**/*.{js,jsx,ts,tsx}": [
    "eslint --fix --max-warnings=0"
  ]
}
  • 移除了对json文件的ESLint检查(ESLint默认不处理json格式,除非有专门插件)
  • 用eslint --fix --max-warnings=0直接针对暂存文件做检查,自动修复可修复的错误,同时零警告容忍,任何错误都会直接中断流程

2. 添加 Husky pre-commit 钩子

在项目根目录执行以下命令,创建pre-commit钩子:

npx husky add .husky/pre-commit "npm run lint-staged"

这样你执行git commit时就会自动触发lint-staged,提前拦截错误,不用等到推送时才发现问题。

3. 优化 pre-push 钩子(可选)

如果希望推送前再做一次全量代码检查+测试,可以修改.husky/pre-push内容:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run lint && npm run test:prepush

这里用npm run lint做全量ESLint检查,确保整个代码库没有遗漏的错误,再执行测试流程。

4. 验证配置

  1. 故意在一个暂存的js/jsx文件中添加ESLint错误(比如重复导入)
  2. 执行git commit,此时应该看到ESLint报错,提交操作被中断
  3. 修复错误后重新提交,流程可以正常执行

额外优化建议

  • 可以调整.eslintrc中的react/prop-types规则,当前设为1(警告级别),如果需要严格拦截可以改为2(错误级别)
  • 确认package.json中的lint命令"eslint src --max-warnings=0"是正确的全量检查命令

内容的提问来源于stack exchange,提问作者Vladimir Kirichenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:27:06