• 朋友圈,提供博客收录、文章聚合展示等功能,欢迎来这里发现有趣的博客并尝试与博主成为朋友!如果你拥有一个独立博客,就赶快申请加入吧,逾 3 位博友正在等你哦!

使用 Rspack 构建 Halo 插件的前端部分

前情提要 Halo 插件的 UI 部分(Console / UC)的实现方式其实很简单,本质上就是构建一个结构固定的大对象,交给 Halo 去解析,其中包括全局注册的组件、路由定义、扩展点等。 基于这个前提,在实现插件机制时,主要面临的问题就是如何将这个大对象传递给 Halo。当初做了非常多的尝试,最终选择构建为 IIFE(Immediately Invoked Function Expression,立即执行函数),然后 Halo 通过读取 window[PLUGIN_NAME](PLUGIN_NAME 即插件名)来获取这个对象。 构建方案采用 Vite,并提供了统一的构建配置。回过头来看,这个方案存在不少问题: 会污染 window 对象,虽然目前并没有出现因为这个导致的问题,但是从长远来看,这个方案并不是最优的。 Vite 不支持 IIFE / UMD 格式的代码分割(主要是 Rollup 还不支持),无法像 ESM(ECMAScript Module)那样实现异步加载模块的机制。 基于第 2 点,如果插件中实现了较多的功能,可能会导致最终产物体积巨大,尤其是当用户安装了过多的插件时,会导致页面加载缓慢。 以 www.halo.run 为例,gzip 之前接近 10M 的 bundle.js,gzip 之后也有 2M - 3M。 以此博客为例,gzip 之后也有 1.8M 的 bundle.js。 基于第 2 点,如果不支持代码分块(Chunk),也无法充分利用资源缓存,访问页面时,也会一次性加载所有插件的代码(即便当前页面不需要)。 基于以上问题,我开始寻找其他替代方案,最终通过翻阅 Rspack(Webpack 的 Rust 实现)的文档发现,Webpack 能够通过配置实现 IIFE 格式的代码分割,最终选择 Rspack 作为尝试。 基本的 Rspack 配置...

Hello Halo

如果你看到了这一篇文章,那么证明你已经安装成功了,感谢使用 Halo 进行创作,希望能够使用愉快。

冰箱,让你我错过了多少新鲜的生活?

下班后逛超市,买了些水果和面包回到家里,发现冰箱早已被老妈塞满,一包不知道几天前的蔬菜,还有四处散落着的剩饭。整个人瞬间都不好了,老妈,冰箱真的不是万能永久保鲜的…… 不过,如果世界没有冰箱,我们每天吃的岂不都是新鲜蔬菜?细细一想,却不无道理。 生活中,我们经常把新鲜蔬菜放进冰箱,这些新鲜蔬菜则期待

雨云香港4区使用体验

雨云香港四区今天(7月1日)上货了,林雨在香港机房奋战一天的成果 配置如下: 机房 cpu 内存 硬盘 宽带 流量

各厂商CDN的CNAME域名及介绍

速查表格 如果你不想听我瞎叭叭,可以直接使用速查表格,如果你想了解一些详情,可以往下翻翻

VPS测试脚本合集

网络相关 三网回程路由测试

傻龙(sharon)香港三网HKG.STD.SMALL2活动鸡使用体验

傻龙昨天(6月28日)晚上上了一批香港一折机器,是为了庆祝香港特别行政区成立27周年 折扣码:KBH824FSMX,最便宜的14刀,打完折1.4刀/月(首月),续费原价. 最便宜的配置上了30多台,五分钟左右就被抢光了 配置如下:

小狗云香港活动CN2鸡使用体验

昨天(6月27日)上午,在B站刷到一条视频,看到有人在卖6元的香港CN2机器,我当时就不相信,想着这货绝对超开了114514倍,所以赶紧买了一台试试水. 配置如下: 机房 cpu

乌兰哈达火山银河之旅

可谓念念不忘,必有回响。 2022 年《再游嵩山》的时候,就一直心心念念能和爱人拥在银河下,看一场流星雨。 现在 24 年了,疫情都结束了,小雅我俩在一块也两年多了,正好端午节三天加上年假,说走就走,看银河去! 如果想看银河,必须满足两个条件:万里无云 + 零光污染。 因为小雅是不愿意爬山的,而且更

冰箱,让你我错过了多少新鲜的生活?

下班后逛超市,买了些水果和面包回到家里,发现冰箱早已被老妈塞满,一包不知道几天前的蔬菜,还有四处散落着的剩饭。整个人瞬间都不好了,老妈,冰箱真的不是万能永久保鲜的……