husky@9、commitlint、lint-staged配置

前言

上一篇文章介绍了通过eslint与prettier配合,实现代码质量与风格的控制,但需要vscode配置的配合才可生效,不具备强制性。本文将继续深入,通过husky、commmitlint、lint-staged的使用,保证远程仓库代码的质量与规范。

  • husky,一款管理 git hooks 的工具
  • commitlint,一款 git commit 提交规范检验工具
  • lint-staged,一个对 git暂存区 代码进行处理的工具

husky

它将在我们提交代码时触发不同的钩子,执行不同脚本,帮忙我们自动化的处理一些任务,比如执行 eslint 命令等。

1. 安装

bash 复制代码
npm install husky -D

2. 配置

  • v9版本

    • 执行配置脚本

      bash 复制代码
      npx husky init
    • 添加钩子

      bash 复制代码
      echo "npm test" > .husky/pre-commit
  • v9之前版本

    • package scripts脚本添加prepare钩子,执行husky install

      bash 复制代码
      npm pkg set scripts.prepare="husky install"
    • 执行配置脚本,自动创建 .husky/_git钩子相关文件

      arduino 复制代码
      npm run prepare
    • 添加pre-commit 钩子,脚本为 npm test

      sql 复制代码
      npx husky add .husky/pre-commit "npm test"

版本差异可参照官方迁移教程

commitlint

commitlint 是当前使用最广泛的git提交规范检验工具,能够较好的帮助我们在项目开发中,对提交信息的 message 规范进行校验。

1. 安装

bash 复制代码
npm install -D commitlint @commitlint/cli @commitlint/config-conventional
  • @commitlint/config-conventional 是基于 conventional commits 规范的配置文件。
  • @commitlint/cli 是 commitlint 工具的核心。

2. 配置

增加 .commitlintrc.js 配置文件

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

3. 结合husky,实现git commit规范校验

设置 commit-msg hook

bash 复制代码
echo "npx --no-install commitlint -e $HUSKY_GIT_PARAMS" > .husky/commit-msg

lint-stated

lint-staged 工具可实现,只针对提交的代码文件进行检查处理。

1. 安装

bash 复制代码
npm install lint-staged -D

2. 配置

在package.json文件中增加内容

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

3. 结合husky,实现对暂存区文件的校验

设置 pre-commit hook

bash 复制代码
echo "pnpm lint" > .husky/pre-commit

总结

  1. husky用来管理git hooks,以此来增强git功能
  2. commitlint结合commit-msg钩子,实现提交规范的校验
  3. lint-staged结合pre-commit钩子,实现对暂存区文件的校验

参考文章

  1. juejin.cn/post/724214...
  2. segmentfault.com/a/119000004...
  3. ovnrain.com/post/husky-...
相关推荐
随风一样自由8 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
IMPYLH9 小时前
HTML 的 <data> 元素
前端·html
YHHLAI9 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
weixin_BYSJ198710 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
沪飘大军10 小时前
ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
javascript
kyriewen11 小时前
我扒了 GPT-5.6 的全部编程跑分——有一项 OpenAI 没敢放出来
前端·gpt·ai编程
前端H12 小时前
微前端 v3 架构升级:从加载隔离到状态协同
前端·架构·状态模式
山河木马12 小时前
GPU自动处理专题3-NDC怎么映射成屏幕像素坐标(视口变换)
javascript·webgl·图形学
陆枫Larry13 小时前
小程序包体积优化:用 SVG 图片替换 iconfont,并保留 CSS 控色能力
前端
Appthing13 小时前
在 TanStack Start 中使用 VitePWA 的正确配置
javascript