Husky + Commitlint + ESLint:打造前端项目的铁三角护城河

✨ 背景

在多人协作的项目中,代码风格不统一、提交信息杂乱无章是灾难的根源。为了避免这种 "野蛮开发" ,我们可以借助三大工具:

  • Husky:拦截 Git 提交/推送等操作。
  • Commitlint:规范 Git commit message。
  • ESLint:保障代码风格和质量。

这三者搭配,像给代码流程上了一把锁------优雅又无情。


📦 安装依赖

首先确保你的项目已经初始化 gitpackage.json

csharp 复制代码
bash
复制编辑
git init
npm init -y

然后安装核心依赖:

scss 复制代码
bash
复制编辑
# husky 安装
npm install husky --save-dev

# commitlint 相关
npm install @commitlint/{cli,config-conventional} --save-dev

# eslint
npm install eslint --save-dev

🔧 配置步骤

1. 初始化 Husky

复制代码
bash
复制编辑
npx husky install

package.json 中添加:

json 复制代码
json
复制编辑
{
  "scripts": {
    "prepare": "husky install"
  }
}

mac 系统需要加

json 复制代码
{
 "scripts": {
   "prepare": "husky install && chmod +x .husky/*",
 }
}

然后添加一个钩子(比如 commit-msg):

bash 复制代码
bash
复制编辑
npx husky add .husky/commit-msg "npx --no-install commitlint --edit $1"

此时目录结构大致如下:

sql 复制代码
sql
复制编辑
.husky/
  └─ commit-msg

2. 配置 Commitlint

根目录新增 commitlint.config.js

ini 复制代码
js
复制编辑
module.exports = {
  extends: ['@commitlint/config-conventional'],
};

你可以使用 Angular 提交规范,支持如下格式:

vbnet 复制代码
text
复制编辑
feat: 新增了登录功能
fix: 修复了表单校验
docs: 更新了README

常见类型包括:

  • feat: 新功能
  • fix: 修复 bug
  • docs: 文档变更
  • style: 不影响代码运行的变动
  • refactor: 代码重构
  • test: 添加测试
  • chore: 构建流程或工具变更

3. 初始化 ESLint

csharp 复制代码
bash
复制编辑
npx eslint --init

按需选择配置风格(如 Airbnb、Standard 或自己定义)。例如你选择的是 Standard:

arduino 复制代码
bash
复制编辑
npm install eslint-config-standard eslint-plugin-import eslint-plugin-n --save-dev

编辑 .eslintrc.js

yaml 复制代码
js
复制编辑
module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  extends: ['standard'],
  parserOptions: {
    ecmaVersion: 12,
    sourceType: 'module',
  },
  rules: {
    // 自定义规则
    'no-console': 'warn',
    semi: ['error', 'always'],
  },
};

⛓️ 再加一层锁:pre-commit 钩子结合 ESLint

我们让 Husky 在 git commit 前自动执行 ESLint 校验:

sql 复制代码
bash
复制编辑
npx husky add .husky/pre-commit "npx eslint ."

也可以搭配 lint-staged 实现只检查变更的文件:

css 复制代码
bash
复制编辑
npm install lint-staged --save-dev

然后在 package.json 添加配置:

json 复制代码
json
复制编辑
"lint-staged": {
  "*.{js,ts,vue}": "eslint --fix"
}

再修改 .husky/pre-commit

sql 复制代码
bash
复制编辑
npx husky add .husky/pre-commit "npx lint-staged"

✅ 提交流程演示

一旦你试图提交一个不规范的提交信息或不合规范的代码,就会被拦截。

csharp 复制代码
bash
复制编辑
git add .
git commit -m "add: 我想随便写点啥"
# ❌ 被 commitlint 拦截

git commit -m "feat: 添加用户登录接口"
# ✅ 通过 commitlint 检查

# 如果代码不规范也会被 eslint 拦截

🌱 后记

如果你的项目越来越大,不妨考虑再集成:

  • Prettier:统一格式
  • Stylelint:样式风格约束
  • Commitizen + cz-customizable:更优雅地生成 commit message

让流程自动化,把精力留给真正重要的逻辑与创意。

相关推荐
QQ1__8115175152 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态2 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子2 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室2 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI2 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing2 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者2 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册2 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李2 小时前
2026 年 Web 前端开发的 8 个趋势!
前端
里欧跑得慢2 小时前
15. Web可访问性最佳实践:让每个用户都能平等访问
前端·css·flutter·web