Uniapp 微信小程序开发中包体积超过 2M 无法上传的解决方案

2024-11-16
来源:网络整理

1.问题描述

在开发微信小程序时,我们经常会遇到超过2M大小的包无法上传:

2. 解决方案

目前微信小程序分包大小有以下限制:

整个小程序所有分包大小不超过30M(服务商开发的小程序不超过20M)

单个子包/主包大小不能超过2M

网上的优化方法一般有以下几种:

1、图像优化:

(1)静态图片尽量使用网上地址,不要放在项目中:

我们可以将图片上传到图片服务器,小程序通过链接来下载和使用图片。

(2)除此之外,由于只能使用本地资源,所以这个比较小。

(3)图像压缩:可以使用在线压缩工具

2.分包加载:

除页面外,其他页面均进行分包,以保证主包的大小。具体分包方式请参考官方文档:使用分包

3.依赖分离:

使用分包后,你会发现一个奇怪的问题。子包的组件和js文件会被打包到主包的.js文件中,导致.js太大。

检查 .json。在该文件下的源码视图中,mp-下有一个节点,用于控制微信分包。您需要将此节点设置为 true:

"optimization" : { "subpackages" : true }

配置完成后重新运行,你会发现分包后的js文件不再被打包到主包的.js中。 (注:其实有可能是分包引入的js被打包成.js,具体可以参考《:vite配置--对小程序依赖进行可视化分析,减少.js体积》)

4.启用代码压缩:

在以下位置启用运行时压缩代码:

5、小程序的发行:

以上是网上常见的优化方法。如果上述优化仍不能满足要求,可以考虑:

6. 分包和异步化:

这部分涉及到交叉转包自定义组件引用和交叉转包JS代码引用。本文仅讲解交叉分包自定义组件引用的使用和注意事项。交叉分包JS代码的使用参考请参考文档。

本文针对新旧项目整合改造中遇到的包过大的问题,尝试使用交叉分包自定义组件引用。新旧项目各有一个页面,两个页面都引用了比较大的内容。组件,导致主包太大。其中一个页面使用的组件被分为以下子包:

首先解释一下组件:组件使用了qiun-data-组件,qiun-data-引入了u-。 u-组件比较大,而且qiun-data-组件也是分包使用的,所以将页面分成子包,将qiun-data-组件(包括u-和u-组件)与主完全分离包裹。

代码及配置示例如下:

小程序分包加载原理_加载分包失败_小程序开发之分包加载

// 主包src/pages/home/index.vue

自定义组件设置占位符组件:

// pages.json { "pages": [ { "path": "pages/home/index", "style": { "navigationBarTitleText": "首页", "usingComponents": { "indicator": "../../subPages/components/indicator/index" }, "componentPlaceholder": { "indicator": "view" } } } ] }

至此,官方文档中对于分包异步的设置已经完成,但是运行这个的时候,可能会报找不到异步分包的组件路径:

在开发者工具中查看代码目录:

确实找不到异步分包组件目录。

原因应该是分包中未使用的部分不会被打包。因此,您可以创建一个新的空页面,并向该页面引入组件:

// src\subPages\asyncSubPage\index.vue

加载分包失败_小程序开发之分包加载_小程序分包加载原理

.json 中的注册页面:

"subPackages": [ { "root": "subPages", "pages": [ { "path": "asyncSubPage/index" }, ... ] }, ... ]

至此,位于主包中的一个大组件被分离到一个子包中并异步加载以供使用。最后看一下微信开发者工具中已经出现的组件目录:

分享