Files
msh-system/msh_single_uniapp/documents/微信主包体积优化.md

60 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

# 微信小程序主包体积优化说明
## 错误说明
- **报错**`main package source size 2542KB exceed max limit 2048KB`
- **含义**:主包代码体积 2542KB超过微信规定的 2MB2048KB上限无法上传。
## 主包与分包
- **主包**`pages.json``pages` 数组中的页面及其**直接间接依赖**(组件、公共 JS、static 等)都会打进主包。
- **分包**`subPackages` 下的页面单独打成一个或多个分包,不占主包体积;用户进入分包页时才下载对应分包。
- **限制**:主包 ≤ 2MB单个分包 ≤ 2MB总包 ≤ 20MB。
## 已做优化(本次)
### 1. 商品分类改为分包(约可减少主包 100KB+
- **原状**`pages/goods_cate/goods_cate` 在主包中且带多个子组件optimization、fresh、contracted、default_cate体积较大。
- **调整**:在 `pages.json` 中新增分包 `goods_cate`,将 `pages/goods_cate/goods_cate` 移入该分包。
- **结果**:跳转路径仍为 `/pages/goods_cate/goods_cate`,无需改业务代码;该页及其独有组件不再占用主包。
### 2. 关闭生产环境 SourceMap
-`vue.config.js` 中设置 `productionSourceMap: false`,减小构建产物体积。
### 3. 主包体积分析脚本
- **位置**`scripts/analyze-mp-main.js`
- **用法**:先对微信小程序做**发行构建**,再在项目根目录执行:
```bash
node scripts/analyze-mp-main.js
```
- **作用**:根据构建后的 `app.json` 识别分包,只统计主包文件,输出主包总大小及主包内大文件列表,便于后续优化。
## 若主包仍超 2MB 可继续做的优化
1. **静态资源**
- `static/` 下图片(如 tabBar 图标、大图)压缩或改用 CDN仅保留必要的小图在主包。
- 非 tabBar 必需的大图可放 CDN页面内用网络地址引用。
2. **公共 JScommon/vendor.js**
- 主包页面尽量少引大库(如富文本、加解密、大 UI 库);只在分包页或按需引入。
- 已启用 `lazyCodeLoading: "requiredComponents"`manifest.json注意主包首屏用到的组件不要拖入过重依赖。
3. **主包页面与组件**
- 主包仅保留:启动页 + tabBar 页(如 tool_main/index、tool_main/community、index、user 等)及订单车等高频页。
- 非 tab 且非首屏必需的页面,尽量放入 `subPackages`
- 首页用到的 `homeIndex` 等组件较多时,可考虑按需异步组件或拆分首屏与二屏逻辑,减少首包体积。
4. **构建**
- 确认发行时已压缩manifest 中微信小程序 `minified: true`)。
- 生产环境已去掉 console当前 vue.config.js 已配置 drop_console
## 查看文件列表与依赖
- **主包文件列表与体积**:运行 `node scripts/analyze-mp-main.js` 查看。
- **代码依赖**:在微信开发者工具中上传代码后,在「详情 → 本地设置」可勾选「上传时代码依赖分析」,上传时会给出依赖与体积提示;也可在「代码依赖分析」面板查看各包包含的页面与文件。
重新发行并上传前,请先**重新发行构建微信小程序**,再执行 `node scripts/analyze-mp-main.js` 确认主包已低于 2048KB。分析脚本会优先使用构建产物中的 `app.json`,并参考源码 `pages.json` 中的分包配置以兼容未重新构建时的估算。