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

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"
  }
}

  • 10
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: git:husky>pre-commit是一个Git钩子,它在提交代码执行一些操作。通常用于代码风格检查、单元测试等操作,以确保代码质量和稳定性。Husky是一个Git钩子管理工具,可以方便地配置和管理Git钩子。 ### 回答2: Git是目最流行的版本控制系统。在大多数项目中,代码的质量和一致性非常重要。在Git中,可以使用钩子(Hooks)来确保代码的质量和一致性。其中,pre-commit是常用的钩子之一。而Git: Husky则是Git中常用的钩子管理工具。 Git: Husky是一个钩子管理工具,它允许开发者进行钩子配置,包括在提交代码运行何种指令。 具体地说,Git: Husky支持pre-commit钩子,使开发者可以在代码提交运行一些脚本,以确保提交代码的质量和一致性。 pre-commit钩子可以被用于在代码提交运行某些指令。例如:静态代码分析工具,或者在代码提交运行的测试。因此,pre-commit钩子可以帮助开发者检查代码错误、格式、风格等。其过程是:在代码提交,pre-commit钩子运行拖的脚本,检查指定的问题并生成反馈,然后提交成功或失败。 总之,Git: Husky中的pre-commit钩子是非常实用的工具。它可以让开发者在代码提交运行各种指令,以检查代码错误、格式、风格等。这有助于确保代码的质量和一致性,提高软件开发的效率和质量。所以,建议开发者在Git中应用Git: Husky这一钩子管理工具,并使用pre-commit钩子确保代码的质量。 ### 回答3: Git是一款非常流行的版本控制工具,而husky>pre-commitGit中的一个功能。Husky是一款JavaScript库,可以通过它来为Git的hooks添加JavaScript脚本,而pre-commitGit hook的一种类型,可以在commit触发,并且可以运行一些脚本来帮助我们检查代码或其它工作。 在Git中,pre-commit可以帮助我们做很多事情。例如,在代码提交,我们可以用pre-commit来对代码进行语法检查、格式化、代码审查、代码测试等。如果代码不符合某些规范,pre-commit还可以阻止代码提交,从而让我们更加规范地管理代码使用husky>pre-commit也非常简单。首先,我们需要在项目中安装husky,然后在package.json文件中设置pre-commit属性来配置pre-commit hook。在pre-commit属性中,我们可以定义一个或多个需要执行的脚本,这些脚本会在commit执行。例如,我们可以在pre-commit中加入代码格式化、代码审查和代码测试三个脚本,来确保我们提交代码符合团队的代码规范和质量要求。 总之,使用husky>pre-commit可以很好地帮助我们管理代码,确保代码的质量和一致性。这对于团队协作和代码维护都非常重要。同时,husky>pre-commit也可以提高我们的编码效率,让我们集中精力在代码逻辑的编写上,而不是在代码格式、代码规范等上浪费时间。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值