uni-app分包预加载必须开启manifest.json的"subpackages":true开关,否则preloadrule无效;路径需严格匹配pages.json绝对路径;packages值须与subpackages中root字段完全一致;network建议先用"wifi"测试。

分包必须先开开关,否则预加载根本不会生效
uni-app 的分包预加载不是“配了就跑”,它依赖底层分包机制开启。如果你只在 pages.json 里写了 subPackages 和 preloadRule,但没打开平台级开关,那预加载完全不会触发——连日志都看不到下载动作。
- 必须在
manifest.json的mp-weixin节点下加:"optimization": {"subPackages": true} - 这个配置只对微信、QQ、百度等小程序平台生效;H5/App 端不走这套逻辑
- 漏掉这步,
preloadRule就是纯摆设,页面跳转时仍会卡顿等待分包下载
preloadRule 的路径必须严格匹配 pages.json 中的完整页面路径
很多人写 "pages/my" 或 "my",结果预加载失败。uni-app 要求 key 必须是 pages.json 中定义的**绝对路径字符串**,包括文件后缀和目录层级。
- 正确示例:
"pages/my/my"(对应src/pages/my/my.vue) - 错误写法:
"my"、"pages/my"、"/pages/my/my"(开头斜杠多余) - 如果用了自定义 tabBar 或 tab 页面,也要确保路径和
pages数组中的一致,不能按实际 URL 猜
packages 值填的是 root,不是文件夹名也不是路径
配置项 packages: ["pagesMember"] 里的字符串,必须和 subPackages 里定义的 root 字段**完全一致**。它不是相对路径,也不是文件系统路径,只是一个逻辑标识符。
- 比如
subPackages中写了{"root": "subpages/product", "pages": [...]},那packages就得填"subpages/product" - 不能简写成
"product",也不能补全为"./subpages/product" - 多个分包用数组,如
["subpages/product", "subpages/user"];填错一个,对应分包就不会预加载
网络策略 network 不是万能保险,别盲目设 "all"
network: "all" 确实最激进,但实际会影响弱网用户首次进入体验:主包还没渲染完,框架就在后台抢带宽下分包,可能拖慢首屏渲染甚至触发微信的“资源抢占警告”。
- 日常开发建议先用
"wifi"测试,确认逻辑无误再切"all" - 注意:App 端不支持
network参数,填了也忽略;只有小程序平台才识别 - 真机调试时,务必在开发者工具「网络」面板或真机日志里搜
preloading或downloadSubNVue,确认是否真正触发
preloadRule 没反应,最后发现 optimization 根本没开。










