• 使用 Husky + Commitlint + Lintstaged 约束每一次 Git 提交


    每一名开发人员都有自己独特的代码风格。但对于多人协作项目,保持统一的风格有利于项目维护。

    我们可以在项目中引入 ESLint、Prettier 来规范代码,但这无法约束 Git commit message

    这时候可以借助 Husky 等工具来把好最后一关

     

    常用工具

    1. eslint (https://github.com/eslint/eslint)

      JavaScript 代码检测工具,检测并提示错误或警告信息

    2. prettier (https://github.com/prettier/prettier)

      代码格式化工具,更好的代码风格效果

    3. husky (https://github.com/typicode/husky)

      Git hooks 工具, 可以在执行 git 命令时,执行自定义的脚本程序

    4. lint-staged (https://github.com/okonet/lint-staged)

      对暂存区 (git add) 文件执行脚本

    5. commitlint (https://github.com/conventional-changelog/commitlint)

    检测 git commit 内容是否符合定义的规范

     

     

    一、Husky

    Husky 是一款 Git Hooks 工具,可以在执行特定的 git 命令时(如: git commit, git push)触发对应的脚本

    安装: (当前版本 7.x)

    $ npm i -D husky
    $ npx husky install
    $ npm set-script prepare "husky install"

    执行以上代码之后,项目的根目录会多出一个 .husky 文件夹,并且 package.json 中会增加一个脚本执行命令

    // package.json
    {
      "scripts": {
        "prepare": "husky install"
      }
    }

    // prepare 会在每次 npm install 的时候执行

    现在 husky 已经安装好了,接下来添加对应的钩子函数

    比如我需要在每次 git commit 提交前执行某些操作,就可以添加一个 commit-msg 钩子

    npx husky add .husky/commit-msg 'npm test'

    然后 .husky 目录下就会增加一个 commit-msg 文件

    这样每一次 git commit 都会执行一次 npm test

    // 如果面临特殊情况,需要绕过 Git Hooks,可以使用 --no-verify  

     

    二、 Commitlint

    Commitlint 可以校验 git commit message, 只有规范的 commit message 才能提交

    安装: (当前版本 16.x)

    npm i -D @commitlint/{config-conventional,cli}

    然后在项目根目录新建一个 commitlint.config.js 文件

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

    上一节已经在项目中引入了 Husky,修改一下 commit-msg 脚本,在每次 git commit 的时候执行 commitlint 校验

    npx husky add .husky/commit-msg 'npx --no -- commitlint --edit $1'
    # or
    yarn husky add .husky/commit-msg 'yarn commitlint --edit $1'

    完成以上配置之后,只有满足规范的 commit message 才能提交(具体的规范可以查看文档

    不满足规则的提交会报错,比如:

     

     

    三、Lint-staged

    在提交的代码的时候,可以通过 ESLint、Prettier 等工具来格式化代码

    但如果直接处理全部代码,首先是可能存在性能问题,其次是可能会修改掉别的同事的代码

    这时可以引入 lint-staged,它可以过滤出 Git 代码暂存区文件,这样就不会影响到未更改的文件

     

    安装: (当前版本 12.x)

    npm i -D lint-staged

    然后在项目根目录创建文件 .lintstagedrc,配置所需要的规则

    比如对暂存区的文件做格式化:

    {
      "*.{js,jsx,less,md,json}": [
        "prettier --write"
      ],
      "*.ts?(x)": [
        "prettier --parser=typescript --write",
        "eslint --quiet"
      ]
    }

    甚至对特定文件执行脚本:

    {
      "src/locales/zh-CN.ts": [
        "npm run your-command"
      ]
    }

    最后通过 Husky 来执行 lint-staged

    npx husky add .husky/pre-commit 'npx lint-staged'

     

     

  • 相关阅读:
    博客园CSS备份4
    博客园css备份3
    CSS透明滚动条效果
    AHK
    修改网页css的插件stlylebot
    欧陆词典CSS修改
    油猴脚本修改网页默认字体
    博客园上传css,js文件并引用
    CSS添加本地字体文件
    博客园css备份
  • 原文地址:https://www.cnblogs.com/wisewrong/p/16070968.html
Copyright © 2020-2023  润新知