不能靠删代码硬减,需将static/大图、视频等搬至cdn并精准控制分包依赖;定位主包膨胀须统计unpackage/dist/build/mp-weixin各目录大小,禁用相对路径引用,启用manifest.json中"optimization":{"subpackages":true},避免preloadrule误配及动态路径全量打包。
直接结论:不能靠删代码硬减,得把 static/ 里的大图、视频、字体、第三方 sdk 搬到 cdn,同时精准控制分包依赖,否则主包永远卡在 2mb 边缘。
怎么快速定位哪个文件在撑爆主包
微信不报错,只在上传时静默拦截,所以必须自己摸清真实体积构成。
- 运行
npm run build:mp-weixin后,打开unpackage/dist/build/mp-weixin目录 - 用系统自带的「显示简介」或命令
du -sh *统计各文件夹大小,重点关注static/、common/、pages/下的 JS 和图片 - 用微信开发者工具右键分包目录 → “在资源管理器中打开”,按大小排序,一眼揪出 >500KB 的 JS 或图片
- 别信 HBuilderX 构建日志里那句模糊的“构建完成”,它不反映真实产物体积
为什么外部化图片后体积没变小
外部化不是拖文件到 CDN 就完事——只要路径还是相对路径或 alias,Webpack 仍会把它打包进 JS。
- 必须用绝对 HTTPS URL:
<image :src="'https://cdn.example.com/img/banner.jpg'></image>,禁用require('@/static/banner.jpg') - CSS 中
background-image: url()同样受限:不能带查询参数(如?v=1.0),不能是 base64,域名必须提前配置到小程序后台「业务域名」 - 字体要写
@font-face { src: url('https://cdn.example.com/font/iconfont.woff2'); },不能放static/fonts/再@import - 所有通过
v-bind:style、import、require引用的资源,只要路径可静态解析,就进包











