使用 ESLint 实现 Git Commit 前的语法检查

如何实现上图中代码提交前的语法检查?

可以通过 Git 的 pre-commit 钩子结合 ESLint 来实现提交前的代码语法检查。以下是实现步骤:

方法一:使用 husky + lint-staged(推荐)

  1. 安装必要依赖

    bash 复制代码
    npm install husky lint-staged --save-dev
  2. 设置 husky

    bash 复制代码
    npx husky install
    npx husky add .husky/pre-commit "npx lint-staged"
  3. 配置 lint-staged : 在 package.json 中添加:

    json 复制代码
    {
      "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
          "eslint --fix",
          "git add"
        ]
      }
    }

方法二:手动配置 Git 钩子

  1. 创建 pre-commit 钩子文件 : 在项目根目录的 .git/hooks/pre-commit 文件中添加以下内容(如果没有该文件,新建一个):

    bash 复制代码
    #!/bin/sh
    
    # 运行 ESLint 检查
    eslint_result=$(npx eslint . --ext .js,.jsx,.ts,.tsx)
    
    if [ $? -ne 0 ]; then
      echo "ESLint 检查失败,请修复以下问题后再提交:"
      echo "$eslint_result"
      exit 1
    fi
    
    exit 0
  2. 赋予执行权限

    bash 复制代码
    chmod +x .git/hooks/pre-commit

方法三:使用简单 npm 脚本

  1. package.json 中添加脚本:

    json 复制代码
    {
      "scripts": {
        "precommit": "eslint . --ext .js,.jsx,.ts,.tsx"
      }
    }
  2. 然后配置 husky:

    bash 复制代码
    npx husky install
    npx husky add .husky/pre-commit "npm run precommit"

注意事项

  1. 确保项目中已正确配置 ESLint(有 .eslintrc.js 或类似配置文件)
  2. 可以调整 lint-staged 配置只检查暂存区的文件,提高效率
  3. 对于 TypeScript 项目,确保已安装 @typescript-eslint/parser@typescript-eslint/eslint-plugin
  4. 如果检查失败,提交会被阻止,直到所有错误被修复

高级配置示例

json 复制代码
{
  "lint-staged": {
    "*.{js,jsx}": ["eslint --fix", "prettier --write"],
    "*.{ts,tsx}": ["eslint --fix", "prettier --write"],
    "*.{json,md,html,css,scss}": ["prettier --write"]
  }
}

这种方法会在提交前自动修复可修复的 ESLint 错误并格式化代码。

txt 复制代码
git add .
↓
git commit -m "feat: xxx"
↓
.husky/pre-commit 被触发
↓
执行 npx lint-staged
↓
lint-staged 找到所有 add 的 .js/.vue 文件
↓
执行 eslint --fix
↓
报错?→ 阻止提交 ✅
相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny7 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹7 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny7 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
小林ixn8 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker8 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜8 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康9 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
一点一木9 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
IT_陈寒10 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端