背景:
项目经常在编译的时候发现同事提交的代码缺胳膊少腿,切在编译前的tsc检测占用了时间,导致领导一直吐槽为什么用vite编译还这么慢...
前提:
项目已支持 eslint、prettier检测支持,开发环境node版本需要14以上(原因)
方案:
预计先用pre-commit和husky结合做提交前拦截,在用lint-staged做git暂存区域内容检测,tsc-files对暂存tsc、ts文件做检测
步骤:
配置git commit message前拦截
-
安装
npm install pre-commit husky -D -
在到项目根目录(这很重要,指的是项目git的根目录) 执行
npx husky install path/.husky⚠️ 这里需要注意:假设你的项目目录为 (以下项目说明路径均假设为当前文件目录结构) -- root -- project -- web(配置项目) 那这里你的执行脚本要在root目录下执行:"npx husky install project/web/.husky" 执行成功后在项目web目录下查看是否生成下图文件(如果成功则说明上述操作成功)这个步骤添加后,为了所有项目参与者都方便,可以直接在package.json中的`scripts` 配置命令:` "prepare": "cd ../.. && husky install project/web/.husky"`, 这样参与者在npm i的时候都可以直接生成husky目录 -
添加钩子
npx husky add .husky/pre-commit "npm test"这步直接在web目录下执行即可,执行完毕,可在.husky目录下查看到一个pre-commit文件,如下图这个时候执行git commit message的时候就会在提交前npm test命令
添加暂存区域检测
-
安装:
npm install lint-staged -D -
配置:(在项目package.json内添加配置)
"lint-staged": { "./src/**/*.{ts,tsx}": "eslint", "./src/**/*.{js,jsx,ts,tsx,less,json}": "prettier --loglevel warn --write", "./static/locale/*.json": "prettier --loglevel warn --write" }然后再去pre-commit内将内部文件内容修改为#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" cd project/web npx lint-staged此时项目在git commit message的时候都会对需要提交的内容文件做prettier检测
ts、tsc文件内容检测
-
安装
npm install tsc-files对当个暂存tsc文件进行检测 -
配置(将package.json的lint-staged调整为):
"lint-staged": { "./src/**/*.{ts,tsx}": ["eslint", "tsc-files --noEmit ./src/vite-env.d.ts"], "./src/**/*.{js,jsx,ts,tsx,less,json}": "prettier --loglevel warn --write", "./static/locale/*.json": "prettier --loglevel warn --write" }注意:这里需要注意点的是,tsc-files --noEmit ./src/vite-env.d.ts这个配置,我的是vite项目, 所以我的全局文件类型声明都在这个vite-env.d.ts内,所以需要引入这个,不然会报svg、less等文件未声明识别错误。
完结:
以上就是基于vite、react项目基础配置的git commit message拦截配置了,全部配置流程,现在执行git commit的时候,就会对暂存内容做tsc检测了,可以在编译的时候去除tsc检测,以便加快编译速度;同时也可以减少所有项目参与人员提交文件"缺胳膊少腿"的现象了