node最佳实践8-提交规范husky

436 阅读2分钟

这里用husky帮忙实现提交规范,下面的代码中,我们首先安装和初始化了 husky,然后我们使用 npx husky add命令新增了 commit-msg 钩子,husky 会在我们执行 git commit 提交代码的时候执行 node scripts/verifyCommit 命令来校验 commit 信息格式。

npm install -D husky # 安装husky
npx husky install    # 初始化husky
// husky9版本 指令更改为npx husky init
# 新增commit msg钩子
npx husky add .husky/commit-msg "node scripts/verifyCommit.js" 
// husky9版本  指令更改为  echo "node scripts/verifyCommit.js" > .husky/commit-msg

然后我们来到项目目录下的 verifyCommit 文件。在下面的代码中,我们先去 .git/COMMIT_EDITMSG 文件中读取了 commit 提交的信息,然后使用了正则去校验提交信息的格式。如果 commit 的信息不符合要求,会直接报错并且终止代码的提交。

const msg = require('fs')
  .readFileSync('.git/COMMIT_EDITMSG', 'utf-8')
  .trim()
  
const commitRE = /^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|release)((.+))?: .{1,50}/
const mergeRe = /^(Merge pull request|Merge branch)/
if (!commitRE.test(msg)) {
  if(!mergeRe.test(msg)){
    console.log('git commit信息校验不通过')

    console.error(`git commit的信息格式不对, 需要使用 title(scope): desc的格式
      比如 fix: xxbug
      feat(test): add new 
      具体校验逻辑看 scripts/verifyCommit.js
    `)
    process.exit(1)
  }

}else{
  console.log('git commit信息校验通过')
}

这样就确保在 GitHub 中的提交日志都符合type(scope): message 的格式。每个提交涉及的模块,类型和信息都清晰可见,能够很好地帮助我们管理版本日志,校验正则的逻辑。如下图,feat 代表新功能,docs 代表文档,perf 代表性能。

commit-msg 是代码执行提交的时候执行的,我们还可以使用代码执行之前的钩子 pre-commit 去执行 ESLint 代码格式。这样我们在执行 git commit 的同时,就会首先进行 ESLint 校验,然后执行 commit 的 log 信息格式检查,全部通过后代码才能提交至 Git。

feat: 新功能
fix: 修改 bug
docs: 文档
perf: 性能相关
refactor: 代码重构(就是不影响使用,内部结构的调整)
test: 测试用例
style: 样式修改
workflow: 工作流
build: 项目打包构建相关的配置修改
ci: 持续集成相关
revert: 恢复上一次提交(回滚)
wip: work in progress 工作中 还没完成
chore: 其他修改(不在上述类型中的修改)
release: 发版
deps: 依赖相关的修改

例如:

git commit -m "fix: 修复一些已知问题"