husky,yorkie 提交代码时格式化校验踩坑

234 阅读2分钟

Why

在观看以下内容的时候,请先确保你的项目安装了 eslint + prettier 套餐。如果没有可以先去了解一下。

现在普遍用eslint+prettier来控制代码格式,开发的时候能得到很好的控制,我们希望在开发的时候也做一次验证,并且自动格式化代码,于是我发现了 yorkie 和 husky 这种利用gitHooks的工具,可以在提交代码的时候做一些操作

yorkie是尤大大操刀forke自husky做的改造. 本质还是husky,只是内置了不用再去做额外配置操作。

lint-staged

提交代码的时候,我们希望只对要提交的部分代码进行eslint校验和格式化操作,就需要安装lint-staged组件,vue-cli创建项目的时候,可以在选项配置里面添加,如果创建的时候没有添加,可以手动安装

yarn add lint-staged -D

根目录创建  .lintstagedrc.json 文件或者 package.json里面配置,控制检查和操作方式

{ 
    "src/**/*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"], 
    "src/**/*.md": ["prettier --write"] 
}
"lint-staged": {
    "src/**/*.{js,jsx,vue}": [
      "vue-cli-service lint"
    ]
},

踩坑
在安装lint-staged的时候,默认安装的是最新版本^13.0.3,提交代码时eslint返回的错误提示消息一些字符显示异常,对比发现是 版本问题 ,尤大大用yorkie的时候安装的是 ^9.5.0版本,删除重新安装这个版本后,发现提示消息正常。

yarn add lint-staged@^9.5.0 -D

yorkie

vue-cli创建项目的时候就自动安装了yorkie

{
    "scripts": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
        "lint": "vue-cli-service lint",
    },
    "gitHooks": {
        "pre-commit": "lint-staged"
    },
    "lint-staged": {
        "src/**/*.{js,jsx,vue}": [
          "vue-cli-service lint"
        ]
    }
}

husky Husky - Git hooks (typicode.github.io))

本质上就是一个与gitHooks关联起来的工具,只需简单安装配置就行

--安装
yarn add husky -D

--初始化 gitHooks,会在根目录创建 .husky 目录
yarn husky install

--在package.json中添加脚本
npm set-script prepare "husky install"

--添加 git pre-commit 钩子(代码提交时),在提交代码时执行后面的命令
--执行完会生成一个pre-commit文件 root/.husky/pre-commit 这个里文件可以修改命令
yarn husky add .husky/pre-commit "yarn lint-staged"


{
    "scripts": {
        "prepare": "husky install", #初始化husky,将 git hooks 钩子交由,husky执行
    }
}

  • prepare : npm内置命令,在install执行成功后自动执行,如果你的同事没有初始化过husky。 在他安装包后会自动初始化

  • set-script: 通过命令行添加 package.json的script命令

看效果

image.png

最后

踩坑做笔记,下次不掉坑。如果有写的不对的地方,欢迎评论区指正探讨~