首页 > 其他分享 >Git — husky + eslint 实现提交前校验与规范提交

Git — husky + eslint 实现提交前校验与规范提交

时间:2023-12-19 15:45:38浏览次数:21  
标签:Git -- lint eslint 提交 commit husky commitlint

node版本: = 14.21.3 || >16.0.0

一、配置ESlint

1.1 安装eslint

npm install eslint -D

1.2 初始化eslint,生成配置文件

npx eslint --init

1.3 在编辑器安装ESlint插件

1.4 通过执行命令检测文件代码规范

# ./src 为需要检测的文件路径
npx eslint ./src

二、配置husky

2.1 安装husky

yarn add husky -D

2.2 在 package.json 中加入prepare脚本,每次在 npm i 安装完依赖后都会执行这个命令

"scripts": {
	// prepare脚本会在npm install之后自动执行,它是npm的一个生命周期脚本
	"prepare": "husky install"
}

2.3 添加 pre-commit 钩子

执行完成会在.husky目录下生成一个pre-commit文件
通过 husky 监测 pre-commit 钩子,在该钩子下执行 npx eslint ./src 指令来去进行相关eslint检测

npx husky add .husky/pre-commit "npx eslint ./src"

运行完之后会在 .husky 文件下新增 pre-commit 文件
若 pre-commit 文件生成失败,可手动添加

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx eslint ./src

2.4 提交时自动修复格式lint-staged

lint-staged 可以让你当前的代码检查 只检查本次修改更新的代码,并在出现错误的时候,自动修复并且推送。
安装lint-staged 如果在生成项目eslint时,我们选择的是Lint and fix on commit,则不需要单独安装,cli已经帮我们安装过了。

yarn add lint-staged -D

修改package.json配置

"husky": {
  "hooks": {
    "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
    "pre-commit": "lint-staged"
  }
},
"lint-staged": {
  "src/**/*.{js,vue}": [
    "eslint --fix",
    "git add"
  ]
}

修改 .husky/pre-commit 文件

...
# npx eslint ./src
npx lint-staged

三、规范提交信息

3.1 局部安装commitizen

commitizen可帮助规范提交信息

# 新版不需要额外安装cz-conventional-changelog,安装commitizen时会自动安装在node_modules里面
yarn add commitizen --dev

3.2 修改 package.json配置

"config":{
    "commitizen":{
        "path":"node_modules/cz-conventional-changelog"
    }
}

此时可以用 yarn cz 代替 git commit 提交

3.3 安装插件commitlint

上面完成后。主动用yarn cz 提交是没有问题的,但是如果用git commit提交就可以绕过规则,所以要拦截git commit

yarn add @commitlint/cli @commitlint/config-conventional -D

3.4 添加 commitlint.config.js 配置文件

module.exports = {
  extends: ["@commitlint/config-conventional"],
  // 定义规则类型
  rules: {
    // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
    'type-enum': [
      // 当前验证的错误级别,2代表错误级别的错误
      2,
      // 在什么情况下进行验证,always表示任何情况下都进行验证
      'always',
      // 泛型内容, 对应cz-config定义的types
      [
        'feat', // 新功能 feature
        'fix', // 修复 bug
        'docs', // 文档注释
        'style', // 代码格式(不影响代码运行的变动)
        'refactor', // 重构(既不增加新功能,也不是修复bug)
        'perf', // 性能优化
        'test', // 增加测试
        'chore', // 构建过程或辅助工具的变动
        'revert', // 回退
        'build' // 打包
      ]
    ],
    // subject 大小写不做校验
    'subject-case': [0]
  }
};

3.5 新增 commit-msg 钩子

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

运行完之后会在 .husky 文件下新增 commit-msg 文件
此时可以 使用 yarn cz 按照提示步骤来 或者 用 git commit 按照标准写注释才能提交

四、所有插件对应的版本如下

"devDependencies": {
  "@commitlint/cli": "^17.6.7",
  "@commitlint/config-conventional": "^17.6.7",
  "commitizen": "^4.3.0",
  "eslint": "^8.49.0",
  "husky": "^8.0.3",
  "lint-staged": "13.1.4"
}

package.json

{
  "name": "vue-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
    "format": "prettier --write src/",
    "prepare": "husky install"
  },
  "dependencies": {
    "@vueuse/core": "^10.5.0",
    "pinia": "^2.1.6",
    "vue": "^3.3.4",
    "vue-router": "^4.2.4"
  },
  "devDependencies": {
    "@commitlint/cli": "^17.6.7",
    "@commitlint/config-conventional": "^17.6.7",
    "@rushstack/eslint-patch": "^1.3.3",
    "@vitejs/plugin-vue": "^4.3.4",
    "@vue/eslint-config-prettier": "^8.0.0",
    "commitizen": "^4.3.0",
    "eslint": "^8.49.0",
    "eslint-plugin-vue": "^9.17.0",
    "husky": "^8.0.3",
    "lint-staged": "13.1.4",
    "prettier": "^3.0.3",
    "vite": "^4.4.9"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,jsx,vue,ts,tsx}": [
      "eslint --fix",
      "git add"
    ]
  }
}

标签:Git,--,lint,eslint,提交,commit,husky,commitlint
From: https://www.cnblogs.com/wjs0509/p/17913851.html

相关文章

  • GitHub 如何修改 Fork from
    如果你的仓库上面是Forkfrom的话,我们有什么办法能够取消掉这个Forkfrom?  解决办法GitHub上面没有让你取消掉Fork的办法。如果进入设置,在可见设置中也没有办法修改仓库的可见设置选项。  唯一的解决办法就是对你需要修改的仓库先全部克隆到你的本地计算机上,......
  • Git:submodule子模块操作
    一、子模块添加gitsubmoduleadd<url><path>gitsubmoduleaddhttps://github.com/../.gitthemes/MeiFixIt二、子模块更新gitsubmoduleupdate--remote--merge三、下载子模块同父模块一起下载子模块gitclone--recurse-submodules<repository-url>父模块......
  • HbuilderX配置Git插件并导入项目和上传代码
    一、安装git从 git官网 下载windows版本的git,然后进行安装,一般不需要只需要默认next就可以了二、安装TortoiseGit工具到 TortoiseGit官网 下载对应的TortoiseGit包进行安装【一般使用默认设置即可:一路next下去,TortoiseGit安装完毕!】三、安装TortoiseGit-LanguagePack中文语言......
  • SQLserver AlwaysOn 提交模式与节点的可用性
    接上文:https://www.cnblogs.com/wy123/p/17905118.html,关于AlwaysOn主副本与辅助副本之间提交模式与安全故障转移的话题参考AlwaysOn属性面板中的信息1,主节点异步提交模式:如果主要副本配置为“异步提交模式” ,则从节点不管是同步或者异步,主节点提交事务都无须等待从节点(永远......
  • github加速软件fetch-github-hosts索引
    详细链接进入文件夹E:\github-host_v2.6\fetch-github-hosts.exe-m=clientWindows启动fetch-github-hosts.exe-m=client自定义获取时间间隔Windows(10分钟获取一次)fetch-github-hosts.exe-i=10自定义获取链接Windowsfetch-github-hosts.exe-u=http://127.0.0.1:9898/......
  • Git本地代码仓库关联远程仓库
    需求背景我在本地创建了一个项目,并且编写了一些代码后,通过使用Git初始化了本地仓库。此时,我又在GitHub上创建了一个仓库,并添加了一个README文件。现在,我想把本地的仓库与GitHub上的仓库关联,并将代码推送到远程仓库。这时候应该怎么办?操作步骤1、在本地项目的目录下初始化Git仓库git......
  • Git|Git推送代码到远端时发现文件冲突,该怎么办?(二)
    背景多人使用同一个远端仓库开发项目,这时候直接推送代码到同一远端仓库,然后就会出现一系列的文件修改冲突情况,接下来我们具体情况具体分析一下。本文的主要围绕着下面两种情况展开的,在阅读之前可以先自己思考一下问题的答案是什么?不同的人修改同一分支相同的文件的相同区域,你会怎么......
  • Github 工具栏
    漏洞及渗透练习平台:WebGoat漏洞练习环境      github.com/WebGoat/WebGoat       git地址:https://github.com/WebGoat/WebGoat.gitDamnVulnerableWebApplication(漏洞练习平台)数据库注入练习平台 用node编写的漏洞练习平台,likeOWASPN......
  • git hook 和 Husky工具
    githook背景git:除了作为版本控制之外,还能执行自定义操作----githook,它存在于.git文件夹下的hook文件夹,里面有很多以.sample结尾的demo文件,要执行它,只需要把文件名后面的的sample删了。应用场景:(1)实现自动编译(2)自动删除仓库中的编译代码Husky工具介绍是一个专门......
  • 【解决Git分支合并冲突】
    1.了解分支合并冲突在多人协作开发中,每个人都可以创建自己的分支来进行工作。当你试图将一个分支的更改合并到另一个分支时,Git会尝试自动合并更改。但是,如果两个分支都修改了同一部分的代码,Git就无法自动决定应该保留哪个更改,这就会导致合并冲突。2.解决分支合并冲突的步骤步......