o***@gmail.com
o***@gmail.com
  • 发布:2025-10-20 18:15
  • 更新:2025-10-20 18:15
  • 阅读:42

微信小程序主包体积又超了?试试这个插件

分类:uni-app

你是否在使用UniApp开发微信小程序时,遇到微信小程序主包超出2M,导致无法上传的问题?

题主自己所在团队曾被这个问题反复困扰,针对这个问题,我们尝试过不同的办法,例如:

  1. 对图片下手腾大小:在编译阶段,对所有图片资源路径都替换成远端图片地址,主包内基本不存在图片资源。
  2. 对项目进行了重构:1️⃣ 删除已下线业务代码;2️⃣ 合理拆分子包,将非首屏页面,或者业务层级较深的页面根据流程类别拆成独立子包;3️⃣ 主包只包含首页;
  3. 尽量使用支持模块化的第三方库,规范import方式,以确保使用时只引用真实使用到的模块,例如lodash-es替换lodash,引入时 import {find} from 'lodash-es',而不是import * as _ from 'loadash-es'

以上办法都有不错的效果,但随着业务功能的迭代,主包还是超了。 T_T

于是我们对主包体积进行分析,发现对主包影响最大的是公共组件,也即是components目录底下的组件,他们被多个子包共用,因此它们被放在主包,原理上是没有问题的(众所周知子包能应用主包的东西,但不能应用其他子包的东西)。

但是项目临上线才突然出现超包问题,时间紧急,我们好几次都是通过在UniApp项目里,将一些公共组件,从主包目录挪到子包目录里,并修正组件的引用,进而使得编译出来的小程序项目的主包目录中的组件减少,从而体积变小。

这种临时做法收效很快,但缺点也很明显:一方面,对于单次组件迁移操作,相对独立的组件比较好迁移,测试回归范围也不大,但不少组件之间存在相互依赖的关系,迁移的成本和风险会大大增加;另一方面,组件被迁移至多个子包后便有了多份副本,增加了长期维护成本和风险。另外,此举治标不治本,不知道后面还要踩多少次坑。

那么,有没有两全之法?答案当然是有的!

如果我们公共组件迁移的操作,不是基于UniApp项目工程本身,而是对编译出来微信小程序工程动刀子,问题就迎刃而解了。
为了实现这个目的,我们写了一个十分易用的vite插件,只需要引入插件,正常build一下,组件的迁移就自动完成了。

如果你也遇到了类似的问题,可以直接把插件down下来放到自己的项目里使用。

传送门:https://github.com/ohyeahhh/wechatMiniProgramPackageOptimizer

注:这个插件是基于我们团队的项目情况写的,具备一定的通用性,也存在一些限制(具体说明见上述链接readme),不完善之处欢迎大家一起指正、讨论、改善。笔芯。

^_^ 一起加油共同进步。

0 关注 分享

要回复文章请先登录注册