提交时,Husky 和 ESLint 自动帮我们检查代码

你是不是也有过这样的经历:匆忙提交代码后,才发现有些低级错误没发现?别担心,今天我来教你如何用 Husky + ESLint 在提交代码时自动检查,确保每次提交的代码都是干净规范的!

简单理解这些工具

  • Husky:就像你代码仓库的"门卫",在你想提交代码(git commit)时,它会自动执行一些检查工作
  • ESLint:代码"质检员",专门检查代码质量和风格是否符合规范
  • Prettier:代码"美容师",自动格式化代码,保持风格统一
  • lint-staged:智能"筛选器",只检查本次修改的文件,不浪费时间检查整个项目

一步步设置代码提交自动检查

1. 首先安装需要的工具

打开终端,在你的项目根目录下运行:

bash 复制代码
npm install --save-dev husky eslint prettier lint-staged eslint-plugin-prettier eslint-config-prettier

2. 配置代码风格规则

创建 .prettierrc.js 文件(用于定义代码格式规则):

javascript 复制代码
module.exports = {
  printWidth: 120,    // 每行最多120字符
  tabWidth: 2,        // 缩进2个空格
  useTabs: false,     // 不使用制表符
  semi: false,        // 不加分号
  singleQuote: true,  // 使用单引号
  trailingComma: 'none', // 不加尾随逗号
  bracketSpacing: true, // 对象、数组加空格
  arrowParens: 'always' // 箭头函数参数总是加括号
}

创建或修改 .eslintrc.js 文件(用于定义代码质量规则):

javascript 复制代码
module.exports = {
  root: true,
  env: {
    browser: true,
    node: true,
    es6: true
  },
  extends: [
    'prettier',
    'plugin:prettier/recommended'  // 整合prettier和eslint
  ],
  rules: {
    // 这里可以添加你自己的代码规则
  }
}

3. 设置 Husky 自动检查

初始化 Husky:

bash 复制代码
npx husky-init

这会在你的项目中创建一个 .husky 文件夹,里面有一个 pre-commit 文件。

修改 package.json 文件,添加以下内容:

json 复制代码
{
  "scripts": {
    "lint-staged": "lint-staged --allow-empty",
    "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx"
  },
  "lint-staged": {
    "**/*.{js,jsx,ts,tsx}": "yarn run lint-staged:js",
    "**/*.{js,jsx,tsx,ts,less,md,json}": [
      "prettier --write"
    ]
  }
}

然后修改 .husky/pre-commit 文件中的内容为:

bash 复制代码
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn lint-staged  # 或者 npm run lint-staged

4. 大功告成!

现在,每当你执行 git commit 时,Husky 就会自动:

  1. 检查你修改的文件是否符合 ESLint 规则
  2. 自动用 Prettier 格式化代码
  3. 如果有错误会阻止提交并提示你修复
  4. 一切正常才会完成提交

实际效果

当你提交代码时,如果代码有问题,你会看到类似这样的提示:

css 复制代码
⚠️  发现ESLint错误:
src/components/Button.js
  第15行:缺少分号

❌ 请修复以上错误后重新提交

修复错误后再次提交即可。如果代码没问题,就会自动格式化并成功提交!

相关推荐
LV技术派10 分钟前
【成为 AI Native Builder · 02】什么是 AI Native Builder:一个人 + AI,交付完整闭环
前端·程序员·ai编程
#麻辣小龙虾#30 分钟前
网页布局css中flex+margin的组合布局技巧
开发语言·前端·javascript
叼烟扛炮34 分钟前
Linux 学习笔记(四十五):Web 安全基石——Cookie、Session 与 HTTPS 原理解析
linux·前端·网络·笔记·学习·tcp/ip·安全
环境栈笔记40 分钟前
指纹浏览器安卓怎么用?从运行位置到功能验收,先把三种方案分清
前端·人工智能·后端·自动化
计算机魔术师1 小时前
Anthropic IPO 招股文件披露近 9000 亿美元隐性债务
前端
chi11301 小时前
【无标题】
前端·javascript·python
IT_陈寒2 小时前
JavaScript实战技巧总结:深挖数组遍历的性能陷阱与实战解法
前端·人工智能·后端
步行cgn2 小时前
为什么既要 web.xml 又要 springmvc.xml?能不能只配一个?
xml·前端·hive
风骏时光牛马2 小时前
大模型综合能力评测:多维度性能与对齐效果对比
前端
winfredzhang2 小时前
从零手写一个毛玻璃风格的页面搭建台:单文件 HTML 实现组件放置、面板磁吸与图层管理
前端·html