第三章:为组件库添加规范【前端工程化入门-----从零实现一个react+ts+vite+tailwindcss组件库】

news/2024/5/18 16:46:36/文章来源:https://blog.csdn.net/qq_53087870/article/details/127182286

第三章:为组件库添加规范

本章我们会用 eslint、prettier以及Husky 为组件库添加规范;

前置知识:

eslint、prettier和husky各有什么作用?
  1. eslint是代码检查工具,你可以配置eslint,然后通过lint命令检测代码是否符合你配置的规则;
  2. prettier是代码格式化工具,可以自己配置,配置之后可以按照规则格式化代码;
  3. husky是一个钩子,让我们方便的向项目中添加git hook,以便于在提交代码前对代码进行检查和格式化校验;
eslint实现的原理是什么?

eslint的实现原理其实就是先转化成AST抽象语法树,基于AST做检查,然后基于字符串做代码fix:

  1. preprocess把非js文本处理为js
  2. 确定parser解析器
  3. 调用parser,通过parser把文件转换成SourceCode,也就是抽象语法树
  4. 调用rules,对AST进行检查,返回linting problems
  5. 通过postprocess对linting problems做处理
  6. 基于字符串的替换做代码fix
prettier实现的原理是什么?
  1. 将代码解析成AST树
  2. 对AST遍历
  3. 调整长句
  4. 整理符号
  5. 用统一固定的格式重新输出
husky实现的原理是什么?

husky的原理其实就是更改了git hook执行的路径,在这个路径下新建配置的hook执行文件;

AST是如何生成的?

AST是通过JS Parser将js源码转化为抽象语法树:
15. 分词:将整个代码字符串分割成语法单元数组(token);
16. 语义分析:将分词得到的语法单元进行一个整体的组合,分析确定语法单元之间的关系,语法分析可以理解成对语句和表达式的识别

配置Eslint和Prettier:

安装一堆软件包:

pnpm i prettier eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin -D

根目录下新建文件 .eslintrc.cjs 和 .eslintignore:

//   .eslintrc.cjs
module.exports =   {root: true,env: {browser: true,es2020: true,node: true,jest: true},globals: {ga: true,chrome: true,__DEV__: true},plugins: ['@typescript-eslint'],parserOptions: {parser: '@typescript-eslint/parser', // 解析 .ts 文件//sourceType: 'module'},rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',"prettier/prettier": "off"}}
//   .eslintignore
*.sh
node_modules
lib
coverage
*.md
*.scss
*.woff
*.ttf
src/index.ts
dist

修改根目录下的package.json:

  "scripts": {"dev": "vite","build": "vite build","test": "vitest","coverage": "vitest run --coverage",+++++ "lint": "eslint --fix --ext .ts src",+++++ "format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\""},

命令行键入:

pnpm lint

结果如下:
在这里插入图片描述
这就是eslint发挥作用了;
修改这个问题我们只需要将 .eslintrc.cjs 文件中的parseOptions的注释去掉:

    parserOptions: {parser: '@typescript-eslint/parser', // 解析 .ts 文件sourceType: 'module'},

再次运行 pnpm lint:
在这里插入图片描述
errors消失了;
命令行键入:

pnpm format

效果:
在这里插入图片描述
代码成功格式化,prettier生效;

配置 Husky:

安装:

pnpm i huksy -D

添加 husky 脚本:

"scripts": {"dev": "vite","build": "vite build","test": "vitest","coverage": "vitest run --coverage","lint": "eslint --fix --ext .ts src","format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\"","prepare": "husky install"},

然后命令行键入:

pnpm i

“prepare”:“husky install” 会在 pnpm i 完成之后执行,然后在根目录下生成.husky文件夹;
添加生命周期钩子:

npx husky add .husky/pre-commit "pnpm lint"

在 .huksy目录下生成了 pre-commit 文件 :
在这里插入图片描述
现在,我们用git 去 commit一下我们的代码,效果如下:

在这里插入图片描述
可以看到,eslint在commit之前运行了;

我们也可以在push之前进行单元测试:

npx husky add .husky/pre-push "pnpm test"

这个就不演示了;
OK,组件库的规范就差不多了,如果需要还可以引入一个commitlint来规范commit message,然后通过husky放到git hook中,让每次提交前都验证一个commit message是否符合规范;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_23424.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打游戏哪款蓝牙耳机好?四款适合打游戏的蓝牙耳机推荐

现在年轻人最离不开的就是手游,蓝牙耳机可谓是手机游戏的最佳搭档,一副好的蓝牙耳机可以为游戏带来很完美的助力,延迟低的蓝牙耳机可以实现更好的游戏体验感,那么接下来推荐四款适合打游戏的蓝牙耳机。 1、南卡小音舱蓝牙耳机 佩…

2022年全国大学生数学建模美赛E题NPP数据获取

今年的数学建模美赛终于开始了!令我感到欣喜的是,今年E题竟然和地理遥感专业息息相关。E题是分析生态环境方面的!因此,有很多小伙伴来询问咨询如何解决这道题目。有些小伙伴,还咨询如何使用CASA软件来计算NPP数据&…

Flink SQL使用Catalog消费Kafka时,多个Source读取同一主题解决方案

一、Catalog定义 Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。数据处理最关键的方面之一是管理元数据。 元数据可以是临时的,例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是…

apollo在虚拟机下部署遇到的坑

目录问题描述解决方法编译问题总结问题描述 ​   其实在虚拟机下部署apollo网上是有线程教程的。可以参考在虚拟机上安装运行百度Apollo 6.0,Apollo 6.0 安装完全指南。我依靠这两个指南准备部署的是apollo 7.0,事实证明虽然版本不同,但部…

1、6边距复合属性

提示:文章写完后,padding可以有到四个值。 1、语法: div{ padding:“50px”; padding:“5px 10px”; padding:“5px 10px 20px”; padding:“5…

flex竖排列元素排列方向

flex竖排列元素排列方向一、flex-direction: (元素排列方向) ※ flex-direction:row (横向从左到右排列==左对齐)※ flex-direction:row-reverse (与row 相反)※ flex-direction:column (从上往下排列==顶对齐)※ flex-direction:column-reverse (与column 相反) 二…

基于导频的信道估计实现

目录 零、前言 一、为什么要信道估计 二、导频的概念 (1)为什么要有导频 (2)导频在信道估计中作用 (3)关于导频序列的补充 三、最小二乘法估计 (1)LS信道估计算法分析 &…

24.登录form的显示

1.概括 本次博客的代码就不自己去写输入框了,直接去引用element官网中的就好。 具体如何实现可以去订阅Vue专栏中的最后两节课噢!!!!!!2.操作方法 打开element官网 https://element.eleme.cn/…

TRC丨艾美捷TRC 那非那韦亚砜说明书

艾美捷TRC Nelfinavir Sulfoxide 是 Nelfinavir Mesylate (N389750) 的杂质。Nelfinavir USP 相关化合物 A。 艾美捷TRC 那非那韦亚砜化学性质: 目录号N389770 化学名称那非那韦亚砜 同义词(3S,4aS,8aS)-N-(1,1-二甲基乙基)十氢-2-[(2R,3R)-2-羟基-3-[(3-羟基-2-…

合宙AIR32F103CBT6刷回CMSIS-DAP固件以及刷ST-LINK V2-1固件方法

合宙AIR32F103CBT6刷回CMSIS DAP固件以及刷ST-LINK V2-1固件方法📌官方介绍文档:https://wiki.luatos.com/chips/air32f103/index.html📍原理图:https://cdn.openluat-luatcommunity.openluat.com/attachment/20220605164915340_AIR32CBT6.pd…

从零备战蓝桥杯——动态规划(递推篇)

双非刷leetcode备战2023年蓝桥杯,qwq加油吧,无论结果如何总会有收获!一起加油,我是跟着英雄哥的那个思维导图刷leetcode的,大家也可以看看所有涉及到的题目用leetcode搜索就可以哦,因为避让添加外链,一起加…

简历石沉大海?来围观月薪 20k 的软件测试工程师真实简历...

​前言:面试的重要性 在互联网公司,你面试的时候能拿到多少 k 薪资,基本上决定了你未来 1-2 年的工资,这个非常现实。软件测试工程师在企业中俩内年想涨工资非常难的,就算有涨,涨幅也不大。当然不排除你待…

前置句与倒装句练习题

1. 特殊语序:前置 1.All the information you need I am putting in the post today. 2.Any item in our catelogue we can supply and deliver 3.How she got the gun through customs they never found out. 4.The kitchen we are planning to redecorate in the…

Day25Linux获取命令帮助,压缩与解压缩,vim编辑器使用,Linux系统下载软件,通过yum方式安装软件

命令字的帮助信息的查询 rm -fr fdisk -l ls ls -l ls -出现许多.开头的文件隐藏文件 Linux命令字格式 命令字 [选项] 命令字 [选项] 文件或目录 ls哪些选项? 1.如何查看一个命令字的帮助手册? man man ls 按q退出 ls -a显示隐藏文件 ls -l显示文件的详…

Chap4 循环结构 学习总结 第五小组

1、为什么需要循环?: 在 c语言中需要重复执行某些操作时,需要用到循环结构 2、循环的三个语句: for循环、while循环、do-while循环。 下列是while循环和for循环的流程图3、三种循环语句的表达式: (1)while(进入循环条件)循环体语句; (2)do {循环体语句;}while(进…

LVS负载均衡—DR模式

内容预知 1.DR模式的特点 2.LVS-DR中的ARP问题 2.1 问题一:VIP地址相同导致响应冲突 问题原因: 解决方法: 2.2 问题二:返回报文时源地址使用VIP,导致网关设备的ARP缓存表紊乱 问题原因: 解决方法&…

GitHub爆火,一份从零到1「架构师成长手册」,原来成为架构师也有捷径

架构师】我想应该没有哪个程序员会陌生了吧,作为一个程序员技术追求的里程碑,有多少程序员想转型架构师而不得门路,其实架构师比较抽象的拆解能力就两方面技术项目足够的技术栈深度和广度再加上足够的项目经验其实是完全可以驾驭架构师的岗位…

QFramework v1.0 使用指南 架构篇:05. 引入 Utility

05. 引入 Utility 在这一篇,我们来支持 CounterApp 的存储功能。 其代码也非常简单,只需要修改一部分 Model 的代码即可,如下: // 定义一个 Model 对象public class CounterAppModel : AbstractModel{private int mCount;public…

爬虫学习(01):了解爬虫超文本传输协议的理解

一、爬虫入门二、web请求过程(百度为例)2.1 页面渲染1. 服务器渲染 -> 数据直接在页面源代码里能搜到2. 前端JS渲染 -> 数据在页面源代码里搜不到三、浏览器工具的使用(重点)1. Elements2. Console3. Source4. Network四、超文本传输协议请求:响应:https协议加密方法(三种…

常见的网络安全风险有哪些?

常见的网络安全风险: 1、勒索软件 勒索软件(Ransomware,又称勒索病毒)是一种恶意软件,它的工作方式基本与计算机病毒类似,不过跟一般的计算机病毒不同,它们不会直接地破坏数据,而是将数据进行加密锁定&am…