husky + lint-staged + commitlint 对 git 提交信息和代码格式进行验证

husky:你可以用它来检测你的提交消息、运行测试、检测代码等等。当你承诺或推动。Husky支持所有Git钩子。

lint-staged:在代码提交前对暂存区里的代码进行检测。

commitlint:对你的提交信息进行检测 ( git commit -m)

版本: 

"husky": "^8.0.1",
"lint-staged": "^13.0.2",
"@commitlint/cli": "^17.0.2",

注意:

由于v13.0.0, lint- staging不再支持Node.js 12。请升级你的Node.js版本到14.13.1或16.0.0以上。

1. 安装 husky

执行:

npm install husky --save-dev

2. 使用 git 钩子

npx husky install

执行之后会在根目录新增一个 .husky 的文件夹

3. 要在安装后自动启用 Git 挂钩,编辑 package.json

// 在 package.json 文件的 scripts 内新增 "prepare": "husky install"
{
  "scripts": {
    "prepare": "husky install"
  }
}

4. 安装 lint-staged 

执行:

npm install lint-staged --save-dev

 5. 编辑 package.json 

// 在 package.json 文件内修改
// 这个是要针对你要提交的所有文件执行的命令
{
  "lint-staged": {
    "*": "npm run lint"
  } 
}


// 如果你所在的项目是执行 eslint --fix 进行文件格式校验
// 就把命令改为 eslint --fix

{
  "lint-staged": {
    "*": "eslint --fix"
  } 
}



// 如果只需要对 js 文件进行校验就将 key 改为 "*.js"
// 就把命令改为 eslint --fix

{
  "lint-staged": {
    "*.js": "eslint --fix"
  } 
}



// 也可以是不同文件执行不同命令

{
  "lint-staged": {
    "*.js": "eslint --fix",
    "*.css": "xxxxx"  // 比如你的 css 格式校验命令
  } 
}

6. 创建 pre-commit 命令挂载到钩子上

 官方文档上是要执行 npx husky add .husky/pre-commit "npm test" 去创建,但是我执行后并没有创建出来,就手动在 .husky 目录下建了个 pre-commit 文件,文件内容为:

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

npx lint-staged

 7. 安装 commitlint

npm install -g @commitlint/cli @commitlint/config-conventional

 8. 添加配置文件

在根目录下添加 commitlint.config.js 文件,内容为:

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

 使用的是 @commitlint/config-conventional 这一套规则,如果需要自定义规则,可以 在 plugins 写一个插件,然后在 rules 内使用:

module.exports = {
  rules: {
    'commit-rule': [2, 'always']
  },
  plugins: [
    {
      rules: {
        'commit-rule': ({ raw }) => {
          return [
            /^\[(feat|fix|docs|style|build|revert)].+/g.test(raw),
            `commit备注信息格式错误,格式为 <[type] 修改内容>,type支持${types.join(',')}`
          ]
        }
      }
    }
  ]
}

 9.  创建 commit-msg 命令挂载到钩子上

同样,官网让执行  npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"' 来添加文件 commit-msg 文件,但是我还是没创建出来,就手动在 .husky 目录下添加了 commit-msg 文件,文件内容为:

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

npx --no -- commitlint --edit "${1}"

走到这一步就基本上完成了,这个时候执行 git commit -m 'fix: 改了xxx' 命令的时候,格式如果错了就会被拦截下来了:

两个实例,一个 代码内有错误,一个commit格式不规范

项目中使用 gerrit 的同学可能还有一个坑 

报错  ERROR: commit dbf44af: missing Change-Id in message footer,

commit-msg  文件内 加入下面代码即可

if [ -f .git/hooks/commit-msg ]; then
  . ".git/hooks/commit-msg"
fij

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值