步骤十:commit阶段检测【React项目创建】

456 阅读2分钟

痛点

  • 以上的封装,都是为了在编码的过程中可以有一个好的编码风格和规范。此外,因为使用的是Typescript,在编码过程中,如果过多的使用any将毫无意义。并且,有些ts检测可以通过@ts-ignore进行规避,这样加入的ts编码规范也得不到体现
  • 就是提交阶段,你编码完成了,但是此次编码修改了哪些内容,应该在commit中体现出来

做什么?

根据上面的痛点,其实可以知道,上面的问题都是针对提交阶段的,因为我在开发的过程中,用多少ignore或者any,其实我不关心,因为可能存在临时过渡期。所以,这里的规范,都是在提交阶段进行检测

  • 在提交阶段:检测修改的文件,是否过多的使用ignoreany
  • 在提交阶段:检测输入的commit是否符合规范

调研

  • githooks: 是一些自定义的脚本,用于控制git工作的流程
  • 配套工具库:huskylint-staged
  • husky: 对git执行的一些命令,通过对应的hooks钩子触发,执行自定义的脚本程序
  • pre-commit:脚本插件。只检测git add .时的缓存文件,对缓存文件执行脚本
  • commit-msg:在git commit时触发
  • 分为客户端钩子服务端钩子

husky配置

用新的配置方式

  • 安装husky
// package.json
{
  scripts: {
    prepare: "npx husky install", // prepare是在npm install之后执行的
  }
}

执行完husky install命令后,可以看到一个.husky/的目录。这个目录就是未来存放git hooks的目录

  • 添加pre-commit钩子
// 添加git hooks - pre-commit
npx husky add .husky/pre-commit "npx lint-staged" // 这里会在pre-commit钩子阶段,触发lint-staged命令

lint-staged的配置还是放在package.json中就可以

  • 配置lint-staged检测
// package.json里lint-staged配置/命令
"lint-staged": {
    "src/**/*.{ts,tsx}": [
      "npx check.js", // 这里就是pre-commit钩子执行,如果这里没有问题,才会触发后面的 git add.否则会抛出错误
      "git add"
    ],
  },

ignore检测(pre-commit)

  • 上面有提到ignoreany,但是这里为了简洁,只检测ignore
  • 利用babel检测
  • 代码地址:代码地址

commit(commit-msg)

开发中,肯定存在:开发修改bug优化提交打包文件等等工作。针对不同的行为,应该使用不同的msg

  • 安装commitlint
npm install -D @commitlint/config-conventional @commitlint/cli
  • 添加commit-msg钩子
// git hooks - commit-msg 添加 shell脚本命令
npx husky add .husky/commit-msg "npx commitlint -e $GIT_PARAMS"
  • 配置commitlint.config.js
// commitlint.config.js  -> commitlint的配置
module.exports = {
    "extends": [
        "@commitlint/config-conventional"
    ],
    "rules": {
        "header-max-length": [
            2,
            "always",
            120
        ]
    }
}

其他

针对githooks其实可以实现很多功能,比如CI/CD,可以实现自动打包发布

传送门