pre-commit钩子,代码质量检查

目前基本使用三款js代码质量检查工具: jslint, jshint, eslint。许多IDE里面也有对应的检查插件,在每次ctrl + s 保存文件的时候,检查当前文件是否符合规范,保证代码质量。
许多团队都会指定一套代码规范code review,更加严格的检查每次代码修改。 也可以在 git commit之前,检查代码,保证所有提交到版本库中的代码都是符合规范的,

在看vue源码时,不免修改代码,就会触发里面配置好的钩子函数。于是,仔细研究了一下vue配置方法,可以发现配置非常简单。

git 钩子文档上介绍非常详细,git init后,在.git/hooks文件中,有一些.simple结尾的钩子示例脚本,如果想启用对应的钩子函数,只需手动删除后缀。所以,列出两种配置方法:

1. 手动修改钩子文件

按照文档上,配置钩子脚本,修改hooks中文件名对应的钩子文件,启用钩子。使用shell脚本检查,可以参考vue1.x 里面如何使用

``` !/usr/bin/env bash

 # get files to be linted
FILES=$(git diff --cached --name-only | grep -E '^src|^test/unit/specs|^test/e2e')

 # lint them if any
if [[ $FILES ]]; then
  ./node_modules/.bin/eslint $FILES
fi

```

文件名是pre-commit,在commit 之前启用的钩子函数, 利用 git diff查看当前有哪些文件修改过,只对指定文件夹中修改的文件使用eslint进行代码检查,渐进式对整个项目实现代码规范。

脚本写好后,不用每次都手动复制到.git/hooks目录下,只需对当前文件创建软连接,到指定目录,在package.json中配置脚本命令

"scripts": { "install-hook": "ln -s ../../build/git-hooks/pre-commit .git/hooks/pre-commit", }

在项目初始化后, 执行npm run install-hook,很方便地配置好了pre-commit 钩子

2. 利用yorkie or husky + lint-staged 构建钩子

在 vue最新的版本中,已经使用尤大改写的youkie, youkie实际是fork husky,然后做了一些定制化的改动, 使得钩子能从package.json的 "gitHooks"属性中读取,

  "gitHooks": {
    "pre-commit": "foo"
  }
}

使用方法跟husky 类似,可以查看husky 文档,介绍非常详细。


 npm install husky --save-dev
 # or npm install yorkie --save-dev

安装完成后,可以发现已经改写了hooks 目录中的文件,只需在package.json 中配置对应钩子要执行的脚本。
husky 配置:


// package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "npm test",
      "pre-push": "npm test",
      "...": "..."
    }
  }
}

回头看看,vue中如何配置


// package.json
 "gitHooks": {
    "pre-commit": "lint-staged",
    "commit-msg": "node scripts/verify-commit-msg.js"
  }
 "lint-staged": {
    "*.js": [
      "eslint --fix",
      "git add"
    ]
  }

前面提到,利用git diff,只lint当前改动的文件,lint-staged就非常准确的解决了这一问题,从这个包名,就可以看出,Run linters on git staged files,只针对改动的文件进行处理。
结合husky一起使用,安装依赖:

npm install --save-dev lint-staged husky

修改package.json 文件


{
+ "husky": {
+   "hooks": {  
+     "pre-commit": "lint-staged"
+   }
+ },
+ "lint-staged": {
+   "*.js": ["eslint --fix", "git add"]
+ }
}

使用了eslint,需要配置.eslintrc, lint-staged还有一个好处,可以在lint后,更加灵活,执行其他脚本,尝试进行修改错误,比如 eslint --fix 检查后并修复错误。

上面列出的vue 文件使用了类似的配置,另外增加了 commit-msg 钩子,对提交说明进行检查,在 scripts/verify-commit-msg.js文件中可以找到检查脚本,


const chalk = require('chalk')
const msgPath = process.env.GIT_PARAMS
const msg = require('fs').readFileSync(msgPath, 'utf-8').trim()

const commitRE = /^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/

if (!commitRE.test(msg)) {
  console.log()
  console.error(
    `  ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` +
    chalk.red(`  Proper commit message format is required for automated changelog generation. Examples:\n\n`) +
    `    ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
    `    ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` +
    chalk.red(`  See .github/COMMIT_CONVENTION.md for more details.\n`) +
    chalk.red(`  You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`)
  )
  process.exit(1)
}

利用process.env.GIT_PARAMS 找到目录,读取msg 说明,进行检查。

使用 husky 要注意,对应属性名已经改为HUSKY_GIT_PARAMS , 而不是原始的 GIT_PARAMS 环境变量。

来源:https://segmentfault.com/a/1190000016750078

转载于:https://www.cnblogs.com/datiangou/p/10130557.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这句话的意思是:husky > pre-commit hook 失败了(添加 --no-verify 来绕过)。 其中,husky 是一个 Git 钩子管理工具,pre-commit hook 是其中的一个钩子,用于在提交代码前执行一些操作,比如代码格式化、代码检查等。如果 pre-commit hook 失败了,就会出现这个提示。 提示中提到了一个 --no-verify 参数,可以用来绕过 pre-commit hook 的检查。但是,这并不是一个好的做法,因为 pre-commit hook 的目的就是为了保证代码的质量和规范性,绕过它可能会导致代码质量下降。所以,我们应该尽量避免使用 --no-verify 参数,而是要修复 pre-commit hook 的问题。 ### 回答2: 此问题涉及到git中的pre-commit钩子(hook),可以通过加入--no-verify命令来绕过验证。 在git中,pre-commit钩子是用于在代码提交前运行脚本的钩子。它用于在代码提交之前进行某些操作,如代码规范检查、语法检查和单元测试。如果pre-commit钩子在运行期间发现问题,则会防止代码提交。 然而,在某些情况下,因为某些原因,pre-commit钩子可能会失败。当您尝试提交代码时,您可能会看到如下错误消息:“husky > pre-commit hook failed (add --no-verify to bypass)”。 在这种情况下,可以使用--no-verify命令来绕过这个问题,如下所示: ``` git commit --no-verify -m "commit message" ``` 这将绕过pre-commit钩子并执行提交。但是请注意,这只会在特殊情况下使用,如果pre-commit钩子出现问题,最好不要轻易绕过它,而是需检查并解决问题。 解决pre-commit hook失败通常需要检查pre-commit脚本中的代码以确定具体错误,例如检查代码中的错误、语法错误等等。通过解决这些问题,可以解决pre-commit hook失败的问题。 总之,当您在git中遇到husky > pre-commit hook failed (add --no-verify to bypass)问题时,您可以使用--no-verify命令来绕过它,但是最好的解决方法是检查并解决pre-commit脚本中的问题。 ### 回答3: 这个问题通常发生在使用git管理代码时出现的错误,可能有几种情况导致这个错误的出现。首先,Husky是一个流行的Git Hook库,它能够在Git操作的不同阶段自动运行脚本。这个错误通常涉及到Husky的“pre-commit hook”,也就是在提交代码前验证代码质量的钩子。 什么是Git钩子Git钩子是一些自动运行的脚本,它们被设置在特定的Git事件上,例如提交代码、合并代码等。Git钩子路径存放在.git/hooks目录下,你可以在这个目录下查看和编辑所有可用的Git钩子。 原因一:Husky pre-commit hook 校验失败 当你将代码提交到Git仓库的时候,Husky pre-commit hook 会自动运行验证脚本来保证代码的质量。如果这些验证脚本出现了问题,Husky会报错并禁止提交代码,出现“husky > pre-commit hook failed”这个错误。这时需要检查校验代码的脚本是否有问题,例如是否有语法错误或者程序错误等。 原因二:Git 钩子脚本出现错误 除了Husky pre-commit hook校验失败之外,还有可能是Git钩子脚本出现了错误。例如,某些开发者可能会自己编写Git钩子脚本,如果这个脚本出现了问题,就会导致上述错误的出现。这时,需要检查Git钩子脚本的路径是否正确、脚本是否有语法错误或程序错误等。 如何解决 为了解决这个错误,你可以使用”–no-verify”参数来绕过Git钩子的校验。但这并不是一个好的解决方案,因为这意味着你无法保证你提交的代码符合你自己或你团队的代码质量标准。正确的解决方案是修复你的Husky pre-commit hook验证脚本或者Git钩子脚本错误,并再次尝试提交提交你的代码。如果你不确定如何修复这些错误,可以向你的团队或社区寻求帮助。如果你遇到了严重的错误,你可能需要卸载和重新安装Husky。 总之,当你遇到“husky > pre-commit hook failed”这个错误时,你应该在修复验证脚本或Git钩子脚本之后再次尝试提交你的代码,而不是仅仅“绕过”钩子的校验。这将帮助你加强你的代码质量和保持团队的开发标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值