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


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.mzph.cn/news/240695.shtml

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

相关文章

嵌入式系统复习--Thumb指令集

文章目录 上一篇Thumb指令集概述Thumb指令详细介绍数据处理指令数据存储指令转移指令异常中断指令 下一篇 上一篇 嵌入式系统复习–ARM指令集(二) Thumb指令集概述 在编写Thumb指令时,先要用伪指令CODE16声明(ADS的编译环境下)&#xff0c…

程序设计的思想

程序设计思想是指在程序设计过程中所采用的一种思维方式,它是程序设计的灵魂和基础。程序设计思想的正确与否直接关系到程序的质量和可维护性。在实际的程序设计中,我们需要遵循一定的程序设计思想,以确保程序的正确性、可读性和可维护性。 …

序列化和反序列化对比分析,序列化和反序列化输出十个学生信息截图

序列化和反序列化是数据处理中的两个相对的概念,通常用于对象的存储和传输。下面是对这两个过程的对比分析: 序列化(Serialization) 定义 目的: 将对象的状态信息转换成可以存储或传输的形式(如XML, JSO…

循环渲染ForEach

目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…

linux:IP地址、修改主机名、域名解析、虚拟机配置固定IP

一:IP地址 1、每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯 2、IP地址主要有2个版本,V4版本和V6版本(V6很少用暂不涉及) 3、IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址 4、可以通过命令:ifconfi…

视频监控技术经历了哪些发展阶段?视频监控技术未来趋势展望

随着城市经济的发展和进步,视频监控也已经应用在人们衣食住行的方方面面,成为社会主体的一个重要组成部分。随着视频监控的重要性越来越凸显,大家对视频监控技术的发展也非常关注。今天我们来简单阐述一下,视频监控技术经历的几个…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)ChannelMap 模块的实现

(三)ChannelMap 模块的实现 这个模块其实就是为Channel来服务的,前面讲了Channel这个结构体里边它封装了文件描述符。假如说我们得到了某一个文件描述符,需要基于这个文件描述符进行它对应的事件处理,那怎么办呢&…

windos/ubuntu20.4下UE4.27.2像素流送

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行,用户可以通过浏览器操作虚幻引擎应用程序,客户端无需下载虚幻引擎,本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

企业出海-如何保护客户账户安全?

近年来国内企业竞争日益激烈,许多企业在这般环境下难以持续发展。那么该如何获得业务的可持续性增长,如何获取更多的客户的同时开阔公司的视野?出海便是如今帮助国内企业能快速发展壮大的潮流之一,摆脱了局限于国内发展的束缚奔向…

单调栈分类、封装和总结

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 通过枚举最小(最大)值不重复、不遗漏枚举所有子数组 C算法:美丽塔O(n)解法单调栈左右寻找第一个小于maxHeight[i]的left,right,[left,right]直接的高度都是maxHeight[i] 可以…

第十二章 异常-Exception

一、异常的概念(P444) Java 语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件可分为两大类 (1)Error(错误…

OpenCV-Python(19):Canny边缘检测

目录 学习目标 Canny 边缘检测原理 1.噪声抑制(噪声去除) 2.梯度计算 3.非极大值抑制 4.双阈值检测(滞后阈值) 5.边缘连接 Canny 边缘检测步骤 Canny 边缘检测的OpenCV实现 不同阈值的边缘检测效果 学习目标 了解Canny边缘检测的概念学习掌握函数cv2.Canny()的用法 …

【星海出品】Keepalived 使用基础案例 (二)

keepalived 使用 [rootmaster ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { //全局配置notification_email { //定义报警收件人邮件地址acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_…

laravel 对接支付,本地穿透问题

本地穿透有好多工具,参考链接:https://zhuanlan.zhihu.com/p/339923535 我这边是用的 NATAPP 官网:https://natapp.cn/ 客户端下载:https://natapp.cn/# NATAPP1分钟快速新手图文教程:https://natapp.cn/article/n…

内部FLASH模拟EPPROM

本例程基于STM32F103ZET6 FLASH大小为512K。 介绍FLASH 不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节&#xff0…

MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类

系列文章目录 前言 此示例说明如何使用深度学习对移动设备摄像头采集的图像进行分类。 在您的移动设备上安装和设置 MATLAB Mobile™。然后,从 MATLAB Mobile 的“设置”登录 MathWorks Cloud。 在您的设备上启动 MATLAB Mobile。 一、在您的设备上安装 MATLAB M…

qt项目-《图像标注软件》源码阅读笔记-Command类绘图及其子类

目录 1. Command 概览 2. Command2D 1. Command 概览 功能:命令栈基类,用来实现撤销和重做功能。 其子类Command2D和Command3D都是实现父类方法,除了构造函数没有自己的独有方法。 字段: redoCommands:存储re…

变量覆盖漏洞 [BJDCTF2020]Mark loves cat 1

打开题目 我们拿dirsearch扫描一下看看 扫描得到 看见有git字眼&#xff0c;那我们就访问 用githack去扒一下源代码看看 可以看到确实有flag.php结合index.php存在 但是当我去翻源代码的时候却没有翻到 去网上找到了这道题目的源代码 <?phpinclude flag.php;$yds &qu…

JWT是什么?它有什么用?

1. 什么是 JWT&#xff1f; JWT是 JSON Web Token 的缩写&#xff0c;通过数字签名的方式&#xff0c;以 JSON 对象为载体&#xff0c;在不同的服务器终端之间安全传输的信息。 2. JWT 有什么用&#xff1f; JWT 最常见的场景就是授权认证&#xff0c;一旦用户登录&#xff…

系列八、VMWare无法启动CentOS7问题排查 解决

一、VMWare无法启动CentOS7 1.1、问题描述 今天在测试代码的时候&#xff0c;需要用到Linux&#xff0c;然后就打开VMWare进行启动&#xff0c;但是启动的时候发现无法启动起来&#xff0c;报了一个如下的错误&#xff1a; 出现了问题那就要解决问题&#xff0c;然后想起来前几…