@z-utils组 重构和自动化实现

news2025/6/9 14:22:02

highlight: monokai
theme: github

包简介

  • @z-utils组 是一个可以在vue/react/pure js 中使用的工具包,它包含三个子类,分别为 @z-utils/base, @z-utils/react, @z-utils/vue 三个分别在不同区域使用。

  • 他是原 zzy-javascript-devtools 的重构版本,在实现之前所有能力的基础上扩展了其他内容:

  • 对内(开发):

    • 使用rollup重构打包逻辑
    • 全自动化打包生成
    • 自动生成更新日志以及版本号
    • 全自动化生成对应包的readme.md文件
    • 文件分级更加明确
    • 扩展性提升
    • 统一开发格式
  • 对外(使用):

    • 开放cjs模式
    • readmd.md文件更加合理,格式统一
    • 新增对vue的支持,以及纯工具包,避免额外开销(分三个包分别按项目决定用哪个)
    • 未来迭代逐渐开放对hooks函数的支持

目录

  • command:逻辑主体
    • plugins:rollup插件存放
      • recordReadme.ts 获取转译后的 每个文件内的特殊注释
    • generatorFiles.js:文件生成执行内容,生成范围包含:打包后的对外提供工具函数,
    • generatorReadme.js:生成向外提供的readme.md
    • packageControler.js 控制打包后的package.json
    • rollupBuild.js 打包程序
    • start.js 脚本执行文件,记录基本信息
  • common:公共内容
    • constant.js:常量
    • utils.js:公共函数
  • content:对外提供工具函数内容存放路径
  • packages:打包后存放路径
  • readmes: 打包后readme拼接内容预设
    • header.md:头部带拼接内容
    • updates.json:记录每次更新信息,供日志段落拼接
  • typings:被打包内容typings(待使用)
  • example.ts 对外提供工具函数的注释举例,严格按照,否则无法正常生成对应readme内容

接下来主要记录一下这个包的实现过程:

实现

大体思路

  1. 对于原先的拆包(原先包的实现思路:在开发npm包时遇到的一些问题以及解决方法(zzy-javascript-devtools)),我决定直接跳过,在录入方法的时候就以单文件进行,因为在后期的componetns和hooks工具中都有对包的引入,如果前期放一块的话,拆分流程会很复杂,而且单个工具的体量对未来来讲,单文件开发是最合适的。
  2. 拆包结束之后分别打包
  3. 在rollup打包过程中记录每个工具的注释内容,最终连带更新日志组合在一起,生成每个包的readme.md
  4. 生成打包后工具的批量导入代码,写入到入口文件内。
  5. 更新指定mode的package.json中的version。

到这里就结束了,随后发包即可。
ps:第五点的更新是依据最开始打包流程开始时的问询流程,并记录到更新日志内。

具体实现

执行命令

image.png

打包

无论更新还是打包模式,都会走genreatorFiles.init(mode) 函数,内部通过 fast-glob 包获取到指定目录内的所有文件,稍加处理即可进行rollup多入口打包。

image.png

rollupBuild.js:

image.png

  • 注意genreatorFiles通过 GenreatorFiles类 new出来的实例,直接进行导出的,而不是导入后再进行new的,这点很重要。这种写法可以让其他文件引入这个实例时进行数据存储而不会丢失,类似状态存储器。

readme.md生成,组装

目前,包内的readme.md结构分三层:header,updates log,contents

  • header是写死的,简单说明包
updates log
  • updates log 是在 执行命令标题内的图片中,对话式交互内如果是更新,则对当前的更新内容做记录,也是generatorReadme.addUpdateSays(say, level, mode)做的事情。

image.png

生成的内容存放在·readmes/updates.json中:

image.png

  • contents
    contents,也就是方法试例,如果想要自动生成,就得考虑在该目标文件内做文章。
    而能经过每个文件的步骤,就只有打包流程中了,也就是利用rollup打包过程,从中开发自定义插件,在transfrom钩子中处理文件内容。(钩子描述)

在开发插件之前,先要确认如何才能拿到我们想要的内容?
保证不会干扰文件的情况下,注释是最合适的,那么就得在注释中加入一些特殊标识来去有目标的截取我们需要用到的内容:

image.png

转换后的效果就是:

image.png
plugin-recordReadme实现:
image.png
image.png

核心就是根据正则,批量获取,更改,记录。

组装

主要内容都已经记录,最后的组装就很简单了:

image.png

generatorContent方法是将之前记录的注释内容遍历改造为字符串内容。

入口文件生成

这个步骤其实和之前没什么差别,就是多了一个cjs模式内容需要多生成一份

更新版本号

这里主要依赖之前记录下的更新日志(updates.json)的version,如果是字符串就是指定模式更新,数组则是批量更新,值都有,获取然后写入就是了,没什么好说的。

小结

rollup重构这个想法在之前看vite源码的时候就已经在考虑了,如今也终于实现。还顺便实现了一些有趣的功能,还是比较满意的,初版基本上就是这些内容了。
目前还差一些比较重要的能力待后续版本更新:TS类型提示,自动发包
目前包内还没有新增工具函数,在后期迭代过程中会逐渐新增vue/react的相关components以及hooks类型

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2016年第五届数学建模国际赛小美赛A题臭氧消耗预测解题全过程文档及程序

2016年第五届数学建模国际赛小美赛 A题 臭氧消耗预测 原题再现: 臭氧消耗包括自1970年代后期以来观察到的若干现象:地球平流层(臭氧层)臭氧总量稳步下降,以及地球极地附近平流层臭氧(称为臭氧空洞&#x…

HarmonyOS 多态样式

还记得我们css中有 按压 失去焦点 点击后 正常状态 的各种样式设置 那么作为前端开发 TS JS的改版 harmonyos自然也有 这里 我们编写代码如下 Entry Component struct Index {build() {Row() {Column() {TextInput()TextInput().stateStyles({//正常状态normal: {.background…

WEB渗透—PHP反序列化(八)

Web渗透—PHP反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩…

20231223使用Rockchip原厂的Android11调通Firefly的AIO-3399J开发板上的AP6356S

20231223使用Rockchip原厂的Android11调通Firefly的AIO-3399J开发板上的AP6356S 2023/12/23 14:14 开发板:Firefly的AIO-3399J【RK3399】 SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2…

Unity3D移动端实现摇一摇功能

手机摇一摇功能在平时项目开发中是很常见的需求,利用Unity的重力感应可以很方便的实现该功能。 Unity简化了重力感应的开发, 通过访问Input.acceleration属性,取回加速度传感器的值。首先我们看一下重力传感器的方向问题。Unity3D中重量的取…

MFC使用高速绘图控件high-speed Charting Control绘制柱形图

1. 创建MFC单文档工程BarChartDemo。 2. 在工程文件夹下新建文件夹ChartCtrl,将ChartCtrl源码放入,如下图所示。在工程中添加这些项,项目——添加——现有项,全部添加。 3. 添加一个对话框,ID为IDD_DLG_BAR,类名为CBarDlg。 4. 在对话框中添加Custom Control控件,将控…

机场信息集成系统系列介绍(7):机场航班信息显示系统FIDS

目录 一、简介 二、架构及相关功能 1、实时更新和显示航班信息 2、多屏显示与查询 3、提供登机口导航信息 4、发布机场公告 5、集成机场的其他延伸服务 6、支持多语言显示 7、监控与故障处理 8、数据分析与优化 9、与航空公司、地面代理的信息交互 10、安全保障与应…

Python数据科学视频讲解:嵌入法(随机森林、提升法、Logistic等)

4.5 嵌入法(随机森林、提升法、Logistic等) 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解4.5节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数…

【Hive_04】分区分桶表以及文件格式

1、分区表1.1 分区表基本语法(1)创建分区表(2)分区表读写数据(3)分区表基本操作 1.2 二级分区1.3 动态分区 2、分桶表2.1 分桶表的基本语法2.2 分桶排序表 3、文件格式与压缩3.1 Hadoop压缩概述3.2 Hive文件…

安捷伦Agilent 8720ES网络分析仪

Agilent安捷伦8720ES S-参数矢量网络分析仪 50MHz至20GHz 100 dB 的动态范围 优异的测量精度 2个测量通道 4个显示通道 频率和功率扫描 快扫描和数据传输速度 通过/失败测试,强大的标记功能 电校准(ECal) 内部使用测试序列的自动化 可选时域…

芯片到底是怎么访问外设

微型计算机的组成:CPURAM硬盘等 什么是FLASH? FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NV…

matlab时间转换

采集的GNSS数据是10hz的。 data(选取其中一部分)如下: (1)char类型 formatOut yyyy-mm-dd HH:MM:SS; str datestr(data,formatOut); str如下: (2)double类型 DateVector dat…

Ai基本视图操作和快捷键设置

这个抓手可以用来拖动,左右的滑块可以用来实现上下左右的移动。 对于放大缩小图片有ctrl与ctrl-(Alt滚轮)如果要回到原来的大小则使ctrl1 Ai还具有像ppt一样的放映功能(可以将工具栏或者其他栏的根据进行替换)

使用html+css+js+three.js写圣诞树

实现效果&#xff1a; <head><meta charset"UTF-8"><title>Musical Christmas Lights</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"><sty…

盲盒小程序搭建:开启互联网盲盒时代

盲盒目前是一个非常火爆的商业模式。随着科技的发展&#xff0c;盲盒市场也开始采用线上盲盒进行拓客&#xff0c;吸引盲盒爱好者。当下在互联网电商影响下&#xff0c;盲盒小程序逐渐受到了商家的青睐。 线上盲盒市场 盲盒消费主要是根据自身的未知性吸引消费者&#xff0c;消…

小白实战教学:开发同城外卖跑腿APP

本文将以"小白实战教学"为主题&#xff0c;向大家介绍如何从零开始&#xff0c;开发一款简单而实用的同城外卖跑腿APP。 一、准备工作 在开始之前&#xff0c;我们需要做一些准备工作。首先&#xff0c;确保你已经安装好了开发环境&#xff0c;包括合适的集成开发环…

09.list 容器

9、list 容器 功能&#xff1a; 将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a; 链表由一系列结点组成 结点的组成&#xff1a; 一个是存…

携手河南恩坤德,共创养殖新篇章

在这个充满机遇与挑战的时代&#xff0c;养殖业正在经历一场前所未有的变革。作为养殖户&#xff0c;您需要一个能够与您共同应对变革、共创未来的合作伙伴。河南恩坤德农业正是这样一个值得信赖的伙伴&#xff0c;我们携手共创养殖新篇章。 河南恩坤德农业以客户需求为导向&am…

SOLIDWORKS Plastics基础功能详解(一)

Batch Manager Batch Manager PropertyManager 经过重新设计&#xff0c;提高了可用性。 在各部分中重新排列用户界面元素为 Batch Manager 提供了一个简化的工作流程。能够指定分析任务的最大 CPU 数。改进了分配给分析任务的模拟类型以及添加、运行和暂停分析任务的控件的可…

Python数据科学视频讲解:特征归一化、特征标准化、样本归一化

5.1 特征归一化、特征标准化、样本归一化 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解5.1节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#…