使用 husky 进行Git提交前的代码校验和 commit msg检查

2023-11-09

husky 是一个 Git Hooks 工具,借助 husky 我们可以在 git 流程的不同生命周期进行一些自动化操作。本文主要介绍提交前 eslint 校验和提交时 commit 信息的规范校验。

什么是 Git Hooks ?

Git Hooks 就是 git 流程中不同的生命周期回调。

husky官网

一、使用最新版 husky (v8.0.0)进行配置

直接根据官网操作就行了。

安装husky

npx husky-init && npm install

提交前代码校验配置流程

1. 安装 lint-staged

npm i -D lint-staged

注意:推荐使用 npm 安装 eslint 和 husky,因为在 windows 操作系统下, 用 yarn 安装依赖,不会触发 husky pre-commit 钩子命令。 

lint-staged: 用于实现每次提交只检查本次提交所修改的文件。 

2. 添加 pre-commit 钩子

如果项目根目录的 .husky 文件夹下还没有 pre-commit 文件,可以执行下面这行命令添加 pre-commit 钩子:

npx husky add .husky/pre-commit 'npm run pre-commit'

3. 在 package.json 添加 scripts

{
  "prepare": "husky install",
  "pre-commit": "lint-staged"
}

4. 新建 .lintstagedrc 配置文件

{
  "src/**/*.{ts,vue}": [
    "prettier --write",
    "eslint --fix"
  ]
}

这个配置文件的意思是,提交时会用 prettier 格式化代码,再用 eslint 修复代码。如果有 eslint 校验不通过的,就会中断提交。

如果提交时你只想让 eslint 校验代码而不自动修复,可以把 'eslint --fix' 改成 'eslint'。

到这里,代码提交前的代码检验已经全部配置好了,当然,提前是你已经配置好 eslint 了。

提交时 commit msg规范校验配置流程

涉及的 git hook:commit-msg

提交信息检查插件: commitlint

1. 安装 commitlint

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

2.  创建 commitlint.config.js 配置文件

echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

上面这行代码会自动创建 commitlint.config.js 文件。

commitlint.config.js 配置说明如下:

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [ // type枚举
        2, 'always',
        [
          'build', // 编译相关的修改,例如发布版本、对项目构建或者依赖的改动
          'feat', // 新功能
          'fix', // 修补bug
          'docs', // 文档修改
          'style', // 代码格式修改, 注意不是 css 修改
          'refactor', // 重构
          'perf', // 优化相关,比如提升性能、体验
          'test', // 测试用例修改
          'revert', // 代码回滚
          'ci', // 持续集成修改
          'config', // 配置修改
          'chore', // 其他改动
        ],
    ],
    'type-empty': [2, 'never'], // never: type不能为空; always: type必须为空
    'type-case': [0, 'always', 'lower-case'], // type必须小写,upper-case大写,camel-case小驼峰,kebab-case短横线,pascal-case大驼峰,等等
    'scope-empty': [0],
    'scope-case': [0],
    'subject-empty': [2, 'never'], // subject不能为空
    'subject-case': [0],
    'subject-full-stop': [0, 'never', '.'], // subject以.为结束标记
    'header-max-length': [2, 'always', 72], // header最长72
    'body-leading-blank': [0], // body换行
    'footer-leading-blank': [0, always], // footer以空行开头
  }
}

3. 添加 commit-msg 钩子

npx husky add .husky/commit-msg  'npx --no -- commitlint --edit ${1}'

 commit-msg 文件里的内容也可以换成其他的,比如你想执行你自己定义的 commitlint script:

npx husky add .husky/commit-msg "npm run commitlint"
{
  "commitlint": "commitlint --config commitlint.config.js -e -V"
}

二、commitlint 提交信息规范语法

提交信息规范

提交信息语法:

type(scope?): subject 换行 body 换行 footer

示例:

chore: run tests on travis ci

feat(blog): add comment section

commitlint rule 语法

rule 语法:规则名称: [级别, 适用, 值]

  • 级别:可选0,1,2。0禁用规则,1警告,2报错。
  • 适用:可选 always, never。

三、旧版 husky 配置流程(v4.x)

安装(同上)

创建 .huskyrc

{
  "hooks": {
    // 提交commit时触发
    "pre-commit": "lint-staged",
    // 检测commit的message时触发
    "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  }
}

创建 .lintstagedrc(同上)

设置 fix 可以自动修复错误:

{
   "src/**/*.js": ["eslint --fix", "git add"]
}

或者使用下面的配置,自动格式化代码(谨慎使用):

{
   "src/**/*.js": ["prettier --write", "git add"]
}

创建 commitlint.config.js(同上)

三、配置不拆分成多个文件的话也可以全部写在 package.json 里面

{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "src/**/*.js": "prettier --write --ignore-unknown"
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 husky 进行Git提交前的代码校验和 commit msg检查 的相关文章

随机推荐

  • .vimrc与.vimrc配置

    修改配置时发现 根用户和普通用户的目录里面 都没有 vimrc和 vim目录 其实在 etc vim vimrc中系统默认配置 如果我们想添加自己的用户配置 需要手动touch创建 vimrc文件存放于用户根目录 用户配置文件 vimrc由
  • 计算机网络----初识

    OSI体系结构 七层协议 TCP IP体系结构 四层协议 中和的五层协议体系结构 学习计算机网络时我们一般采用折中的办法 也就是中和 OSI 和 TCP IP 的优点 采用一种只有五层协议的体系结构 这样既简洁又能将概念阐述清楚 应用层 应
  • ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregate

    报错 ERROR 1055 42000 Expression 1 of SELECT list is not in GROUP BY clause and contains nonaggregated column work ad api
  • 【Cinemachine智能相机教程】VirtualCamera(三):Aim属性

    摘要 长文预警 先收藏后品尝 Cinemachine中的虚拟相机如何旋转来让镜头锁定目标物体呢 这就需要搞明白Aim属性的设置咯 洪流学堂 让你快人几步 你好 我是郑洪智 你可以叫我大智 我正在记录带小新学Unity的经历 自从咱们一起5分
  • 2023版最新版Python安装教程

    你可以通过终端窗口输入 python 命令来查看本地是否已经安装Python以及Python的安装版本 python下载 在官网下载Python 下载速率还非常的慢 所以 这里为大家分享Python网盘下载链接 点击下方公众号卡片 回复关键
  • win 下 c++ 编译环境配置

    文章目录 一 安装 CMake 二 安装 MinGW w64 三 安装 vscode 四 编译运行 1 code 2 编译 linux 下使用 cmake 编译 c 啥的还挺简单的 win就麻烦些 这里记录一下 一 安装 CMake 地址在
  • erp登录显示内部服务器错误,错误openerp.addons.website.models.ir_http:500内部服务器错误:从od注销后...

    我用的是odoov9社区在ubuntu14 04安装完成后是完美的所有工作 在 但是当我安装了odoo的网站模块 当我从odoo注销后 会出现以下错误 500 内部服务器错误 我的日志 Traceback most recent call
  • linux中grub详解

    grub Grand Unified Bootloader grub 0 x grub legacy grub 1 x grub2 grub legacy stage1 mbr stage1 5 mbr之后的扇区 让storage1中的bo
  • QML debugging is enabled. Only use this in a safe environment.

    系列文章目录 文章目录 系列文章目录 前言 一 Qt Quick是什么 1 QML核心 二 使用步骤 1 main cpp 3 运行结果 前言 因为有个需求 C 和web交互 初步想到在Qt中使用QWebChannel 今天第一次使用Qt
  • Elasticsearch在thinkphp5中的使用增删改查(模糊查询、批量查询)

    Elasticsearch在thinkphp5中的使用 模糊查询 需要安装elasticsearch elastic header master kibana analysis ik四个包 如下图所示 需要的包直接去github上搜索就可以
  • 一年月份大小月口诀_农历大小月卦口诀详解(最新版)

    农历大小月卦口诀详解篇一 天干地支推算口诀 天干地支推算口诀 推算年干支口诀 掌上推算年干支 支子花甲起根源 阳支都是旬开始 天干为甲尾四年 隔位逆推十年正 顺推年尾五零三 逐支加减六十数 掌上推算千万年 推算方法 掌上推算年干支 支子花甲
  • MySQL 查询数据并修改符合条件的字段的显示内容

    笔记 MySQL 查询数据并修改符合条件的字段的显示内容 SELECT A CASE A Status WHEN 2 THEN ELSE B Name END AS Name CASE A Status WHEN 2 THEN ELSE B
  • 给浏览器设置一个图片背景/主题

    先看看效果图 此方法适用于 谷歌浏览器 chrome 火狐浏览器 firefox 360极速浏览器 QQ浏览器 360安全浏览器请移步 给360安全浏览器添加一个图片背景 主题 实现步骤 1 先在你的浏览器的插件商城里面搜索安装styluh
  • Activity 启动模式及常见启动Flag总结

    本文部分参考自 http blog csdn net mayingcai1987 article details 6200909 部分内容自己总结 错误之处请指正 一 Activity的4种启动模式 1 android launchMode
  • 【hello Linux】Linux第一个小程序 - 进度条

    目录 先来区分两个标识符 回车和换行 1 倒计时 2 进度条 Linux 下面来编写Linux系统下的第一个小程序 进度条 先来区分两个标识符 回车和换行 r 和 n r 回车 代表回到本行的开头 n 换行 代表回到光标的下一行的光标处 我
  • 静态分析工具Cppcheck在Windows上的使用

    之前在https blog csdn net fengbingchun article details 8887843 介绍过Cppcheck 那时还是1 x版本 现在已到2 x版本 这里再总结下 Cppcheck是一个用于C C 代码的静
  • (二叉树)从中序和后序遍历构造树

    题目描述 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下的二叉树 3 9 20 nu
  • 交换a,b, 不使用中间变量

    第一种方法 a a b b a b a a b printf a d b d n a b 第二种方法 swap69 a b a b printf a d b d n a b void swap69 int a int b int pa in
  • 黑盒测试与白盒测试各自的优缺点

    黑盒测试的优点 1 比较简单 不需要了解程序内部的代码及实现 2 与软件的内部实现无关 3 从用户角度出发 能很容易的知道用户会用到哪些功能 会遇到哪些问题 4 基于软件开发文档 所以也能知道软件实现了文档中的哪些功能 5 在做软件自动化测
  • 使用 husky 进行Git提交前的代码校验和 commit msg检查

    husky 是一个 Git Hooks 工具 借助 husky 我们可以在 git 流程的不同生命周期进行一些自动化操作 本文主要介绍提交前 eslint 校验和提交时 commit 信息的规范校验 什么是 Git Hooks Git Ho