message:Error: 系统错误,错误码:80051,source size 2954KB exceed max limit 2MB [20220812 16:39:55][wx14bc5aec35764fb5]
appid: wx14bc5aec35764fb5
openid: o6zAJs-yr38C2ZREld_n3Ks01iLU
ideVersion: 1.05.2201240
osType: win32-x64
time: 2022-08-12 16:40:05
什么鬼为啥小程序预览报错?上传报错?why?真坑啊
没办法静下心看看啥问题,哦 原来是小程序包大小超过2MB限制了呀。
首先排查问题,到底是静态资源太多了还是代码copy冗余了,还是项目真就贼庞大。
静态资源太多怎么处理?简单直接放cdn 放后台服务器 总之不要放到前端项目就行。
代码冗余太疯狂怎么处理?(省省吧一般人解决不了)。
项目太大怎么处理? 分包 ps:铺垫这么多终于到正题了。
什么是分包
分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。
分包的好处
对小程序进行分包的好处:
- 可以优化小程序首次启动的下载时
- 在多团队共同开发时可以更好的解耦协作
- 主包超限问题
- ps:代码冗余用分包也能解决哈哈
配置方法(这是小程序的文件目录,uni-app的也是同理)
假设支持分包的小程序目录结构如下:
├── app.js
├── app.json
├── app.wxss
├── packageA
│ └── pages
│ ├── cat
│ └── dog
├── packageB
│ └── pages
│ ├── apple
│ └── banana
├── pages
│ ├── index
│ └── logs
└── utils
开发者通过在 app.json(uni-app是pages.json) subpackages
字段声明项目分包结构:
{
"pages":[
"pages/index",
"pages/logs"
],
"subpackages": [
{
"root": "packageA",
"pages": [
"pages/cat",
"pages/dog"
]
}, {
"root": "packageB",
"name": "pack2",
"pages": [
"pages/apple",
"pages/banana"
]
}
]
}
容易出现的问题: 如果报错了就对照下
分包目录错误:A目录下的AA页面 分包到了B分包;
跨域分包乱引文件或组件等;
tabBar 页面不在主包内;
分包预下载
1. 什么是分包预下载
分包预下载指的是:在进入小程序的某个页面时,由框架自动预下载可能需要的分包,从而提升进入后续分包页面时的启动速度。
2. 配置分包的预下载
预下载分包的行为,会在进入指定的页面时触发。在 app.json 中,使用 preloadRule 节点定义分包的预下载
规则,示例代码如下:
"preloadRule": {
"pages/contact/contact": {
"packages": [
"p1"
],
"network": "wifi"
}
},
3. 分包预下载的限制
同一个分包中的页面享有共同的预下载大小限额 2M
最后:还有独立分包和分包异步化
这部分就不介绍了一般不会用到,我的小程序用到了独立分包功能可以体验下