⚡Husky实战篇,让你在git commit时对项目进行eslint校验

前言

本文是规范化Eslint的下篇:主要聊下代码提交时,通过钩子去校验下项目中的eslint规范

关于项目中的Eslint容易混淆的点,和Eslint配置参数详解,请看Eslint的上篇:Eslint项目实战中,容易混淆的一些小知识点

规范化通常在带团队的时候很有用,给自己的小队制定一个合适的规范,更有利于提高项目质量和团队产出。

我在网上参考很多大神的高赞文章把这些小知识点提炼了出来,学习过程中自己也收获了很多,这里分享给小伙伴们。

正文开始

1,husky

Husky 是一个基于 Git 的钩子工具,用于在提交代码之前运行一些脚本。这对于检查代码质量、自动格式化代码非常有用。

Husky支持了哪些钩子? 官网都罗列了:官网

husky官网有两种安装方式:一键安装手动逐步安装

这里使用一键安装的方式

1.1, 安装

js 复制代码
npx husky-init && npm install

命令执行成功后,如下图

这条命令做了四件事

  • 安装了husky,npm install husky -D

  • package.json的添加了命令"prepare": "husky install"

  • 项目根目录下创建了.husky文件夹,pre-commit文件里默认执行的命令是 npm test

  • 配置了git钩子的路径

prepare": "husky install 命令的含义:当我们执行npm install安装完项目依赖后会执行 husky install命令创建.husky目录
yarn不支持prepare,但是提供了postinstall替换prepare

1.2, 修改成适合你项目校验eslint的命令

pre-commit文件默认的 npm test改成你项目中进行eslint校验的命令

js 复制代码
npm run lint // 我项目的中校验命令是这个,这是vue-cli脚手架自己提供的
 

到此,husky配置就结束啦

因为我们配置的是git commit前校验规则的钩子,所以通过下图可以看到,在执行git commit的时候,已经开始校验啦

  • 校验执行的命令是我们上面配置的npm run lint

  • 我在校验规则里配置了开启console校验,警告等级为error,下图也也出来了对应的提示

校验失败,进行代码提交的时候,是不会把本地的开发代码提交上去的

但是,每次提交代码要校验整个项目的代码,太慢了~~~

能不能每次提交代码只校验本次修改的代码呢???

lint-staged就呼之欲出啦~~~

2,husky + lint-staged

2.1,安装

js 复制代码
npm i -D lint-staged

2.2,pre-commit文件里命令改成npm run pre-commit

2.3,package.json里的加一条命令

2.4,根目录添加.lintstagedrc配置文件

js 复制代码
 
{
  "src/**/*.{ts,vue}": [
    "prettier --write",
    "eslint --fix"
  ]
}

通过下图可以看到,在执行git commit的时候,已经开始校验啦

到此,husky + lint-staged配置也就结束啦

3,可能遇到的问题,解决方案在此

3.1,根目录下面没有.husky文件夹

安装后如果给出下图 这种提示,并且你的项目根目录下面没有.husky文件夹

提示:请确认你当前项目有没有本地和远程仓库进行过代码拉取,推送等操作

因为husky是基于git的钩子做自己的一些逻辑,项目都没有使用过git进行代码的版本控制,当然也不能用husky啦~~~

3.2,没有pre-commit文件

这一步有的小伙伴如果是基于老项目执行命令后,出现.husky文件夹下没有pre-commit文件的问题,如下图

不要慌~~~ 执行下面的命令

js 复制代码
npx husky add .husky/pre-commit 'npm-run-pre-commit'

执行完之后,pre-commit文件就出来了,但是文件里的命令是'npm-run-pre-commit'

也不要慌~~~ 手动改成'npm run pre-commit'就行啦

完结

这篇文章我尽力把我的笔记和想法放到这了,希望对小伙伴有帮助。

欢迎转载,但请注明来源。

最后,希望小伙伴们给我个免费的点赞,祝大家心想事成,平安喜乐。

相关推荐
开开心心就好37 分钟前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
Setsuna_F_Seiei3 小时前
前端转型 Agent 开发 05 之 Agent Hooks 与 Checkpointer(让 Agent 从全自动转变人为可掌控)
前端·agent·ai编程
百万蹄蹄向前冲5 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
默_笙5 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan6 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen6 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理7 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
我命由我123457 小时前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制
IT_陈寒8 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche15008 小时前
利用 RAG 为答疑机器人扩展知识范围
前端