首页 > 其他分享 >从0搭建Vue3组件库(十三):引入Husky规范git提交

从0搭建Vue3组件库(十三):引入Husky规范git提交

时间:2023-06-03 14:34:49浏览次数:44  
标签:git -- Vue3 lint 提交 husky pnpm Husky commitlint

为什么要引入 husky?

虽然我们项目中引入了prettiereslint对代码格式进行了校验,但是多人开发的时候难免依然会有人提交不符合规范的代码到仓库中,如果我们拉取到这种代码还得慢慢对其进行修改,这是一件很麻烦的事情,同时也为了避免团队成员提交五花八门message,因此我们可以引入 husky 来从源头上解决此类问题。简单来说,husky 可以在我们提交代码之前校验我们的代码是否符合我们配置的规范。接下来就让我们看一下 husky 的具体使用吧!

husky 的使用

首先安装

pnpm i husky -D -w

在 package.json 中 scripts 中设置 prepare 钩子:husky install,在使用pnpm install的时候就会自动执行husky,以便于别人拉取完我们代码进行pnpm insall的时候直接进行husky install。我们可以使用命令

pnpm pkg set scripts.prepare="husky install"

或者你也可以手动添加


 "scripts": {
    ...
    "prepare": "husky install"
  },

因为我们没有执行pnpm install,所以要先执行一下

npx husky install

然后添加一个 commit 钩子文件

npx husky add .husky/pre-commit "npm run xxx"

然后我们就会发现根目录出现了.husky/pre-commit 文件,我们修改一下 commit 之前的命令,让其提交之前先进行 lint 校验

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

pnpm run lint:script
pnpm run lint:style

修改一个不符合 eslint 的规范文件,然后进行提交之后你会发现它会先自动给你修复之后再进行提交,如果无法修复则抛出一个错误

commitlint 的安装与使用

我们看开源项目的时候会看到他们代码提交信息会有诸如feat: 添加xxx,fix: 修复xxxbug之类的信息,其实这些也是有一个规范的,下面列举一些常用的 git 提交规范

  • build: 编译相关的修改,例如发布版本、对项目构建或者依赖的改动
  • chore: 其他修改, 比如改变构建流程、或者增加依赖库、工具等
  • ci: 持续集成修改
  • docs: 文档修改
  • feat: 新特性、新功能
  • fix: 修改 bug
  • perf: 优化相关,比如提升性能、体验
  • refactor: 代码重构
  • revert: 回滚到上一个版本
  • style: 代码格式修改, 注意不是 css 修改
  • test: 测试用例修改

为了让我们团队都使用这些提交规范我们就需要用到commitlint,首先我们需要安装几个工具

pnpm install --save-dev @commitlint/config-conventional @commitlint/cli -w

其中 @commitlint/config-conventional 是一个规范配置,标识采用什么规范来执行消息校验, 这个默认是 Angular 的提交规范,@commitlint/cli 是一个使用 lint 规则来校验提交记录的命令行工具

新建commitlint.config.cjs,这里可以自定义配置 git 提交的 message 规范

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

然后在.husky/commit-msg 中添加npx --no -- commitlint --edit "$1"

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no -- commitlint --edit "$1"

然后提交一个不符合规范的 type,就会发现报错了

image.png

正确提交方式应为<type>(<?scope>): <subject>,例如

feat(global): 添加commitlint规范

配置 lint-staged

我们根据上面的配置是可以实现我们想要的效果的,但是我们会发现每次提交代码的时候 ESlint 或 Stylelint 都会检查所有文件,而我们需要的是只让它们检测新增的文件,因此我们可以使用lint-staged来解决这个问题

首先安装lint-staged

pnpm add lint-staged -D -w

然后再 package.json 中进行配置

{
  "lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,vue}": [
      "eslint --ext .js,.jsx,.vue,.ts,.tsx --fix --quiet ./",
      "stylelint --fix \"packages/components/src/**/*.{css,less}\""
    ]
  },
    "scripts": {
    "lint-staged": "lint-staged"
  },
}

最后修改一下``.husky/pre-commit

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm run lint-staged

ok,现在它只会检测我们添加到暂存区的文件了

完整代码已经提交到easyest上了,需要的小伙伴可以自取~

最后

如果你对组件库开发感兴趣的话可以扫码关注公众号web前端进阶,里面有详细的搭建过程,记得点赞哦~~

标签:git,--,Vue3,lint,提交,husky,pnpm,Husky,commitlint
From: https://www.cnblogs.com/zdsdididi/p/17453936.html

相关文章

  • Gitlab 本地部署全过程、Gitlab Pages、企业版 PATCH
    Gitlab官网目前提供了EnterpriseEdition和CommunityEdition两种版本,分别对应linux系统的软件包gitlab-ee和gitlab-ce。看名字就知道,gitlab-ee是收费的功能更加丰富的版本。此外,企业版根据用户付费情况的不同,又分为了Starter、Premiun、Ultimate三种PLAN,可以在htt......
  • 最小编译器和 UI 框架「GitHub 热点速览」
    如果有一个关键词来概述本周的GitHub热门项目的话,大概就是van和sectorc都用到的smallest。只不过一个是前端的响应式框架,一个是搞编译的C编译器。它们除了轻量化这个共同特点之外,还有好用,足以满足你的日常编程所需。说到编程,EasySpider便是一个免去敲代码工作量,用看得见......
  • Intersection Observer API 交叉观察器 API vue3 antd table 滚动加载 使用过程
    需求:表格滚动加载做法:步骤一:给表格最后一行添加特定标识,类名或者id等组件库https://www.antdv.com/components/table-cn#APIwebApihttps://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API组件名table添加类名的组件方法rowClassName使用例子::......
  • git仓库支持submodule
    概述git仓库引用其他仓库,类似软连接//usedgitsubmoduleaddgit://github.com/[USERNAME]/[REPO_NAME].gitTARGET_FOLDER在主仓库创建为TARGET_FOLDER的文件夹这会克隆一个外部仓库:git://github.com/[USERNAME]/[REPO_NAME].git到TARGET_FOLDER,类似gitclone这同时......
  • git一些小经验(3)----不再跟踪纳入git管理的文件或目录
    纳入git管理的有些文件,后续不想再纳入管理了,怎么处理?比如之前我开发的输入法的数据文件,刚开始是需要纳入git管理的,以便存储初始的数据文件,但是这个文件需要不断刷新,这样后续就不需要继续纳入管理了,怎么取消呢?参考:https://blog.csdn.net/marco006/article/deta......
  • mac电脑git配置sshKey后不能下拉代码
    配置全局gitconfig--globaluser.name用户名gitconfig--globaluser.email邮箱gitconfig--list//查看配置的用户ssh-keygen-trsa-C248******@qq.com//输入邮箱,一直回车(遇到y/n,选y)ls-al~/.ssh//查看是否生成了私钥,公钥(id_rsa是私钥id_rsa.pub是公钥)......
  • gitlab--不同的 stage 不重新下载代码、GIT_CHECKOUT、制品 artifacts
    介绍在gitlabci中,不同的stage都会重新下载代码,例如下面的.gitlab-ci.ymldefault:image:ruby:2.7.5stages:#运行的阶段顺序-build-test-deploybuild:#job的名称stage:build#阶段的名称script:-ls-l-echo123>test1.txt#在......
  • gitlab--不同的 stage 不重新下载代码、GIT_CHECKOUT、制品 artifacts
    介绍在gitlabci中,不同的stage都会重新下载代码,例如下面的.gitlab-ci.ymldefault:image:ruby:2.7.5stages:#运行的阶段顺序-build-test-deploybuild:#job的名称stage:build#阶段的名称script:-ls-l-echo123>test1.txt#在......
  • git修改提交历史的用户名和邮箱
    1.clone仓库拉取最新代码gitclone2.查看日志--查看没修改之前的作者和邮箱gitlog3.命令行执行修改下面的中文即可,注意之前的邮箱不能写错,大小写都不能错gitfilter-branch-f--env-filter'OLD_EMAIL="原来的邮箱"CORRECT_NAME="现在的名字"CORRECT_EMAIL="现在......
  • git一些小经验(1)----新建git仓库
    创建远程仓库此处假设你已经安装了git,并且配置了远程git仓库的ssh密钥.我是用https://gitee.com/作为远程仓库的,登录之后,在主页右上角,点击加号按钮,就可以创建一个新仓库,如下图所示:创建仓库时,如果预先选择了一些模板,则仓库中就会有一些初始文件.创建本地仓库......