uni-app 微信小程序分包优化
一、优化方案
1、开启--minimize压缩模式(针对vendor.js
过大的情况可以使用运行时压缩代码)
HBuilderX
创建的项目勾选运行-->运行到小程序模拟器-->运行时是否压缩代码
cli
创建的项目可以在package.json
中添加参数--minimize
,示例:
"dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --minimize"
2、让分包的依赖就打包在分包里,别打包到主包里,其实只要添加一个配置及可以了。
打开manifest.json,在“mp-weixin”里添加代码,添加后,记得一定要重新运行项目,才看到效果,单单靠热更新是不行的!!!
"optimization":{ "subPackages":true }
3、分包设置
一、分包注意事项
- 微信小程序每个分包的大小是2M,总体积一共不能超过20M。所以需要分包管理文件 。
- 主包:放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;
- 分包:是根据pages.json的配置进行划分。
- 在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,会把对应分包自动下载下来,下载完成后再进行展示。
- 静态文件:分包下支持 static 等静态资源拷贝,即分包目录内放置的静态资源不会被打包到主包中,也不可在主包中使用。
- js文件:当某个 js 仅被一个分包引用时,该 js 会被打包到该分包内,否则仍打到主包(即被主包引用,或被超过 1 个分包引用)
- 自定义组件:若某个自定义组件仅被一个分包引用时,且未放入到分包内,编译时会输出提示信息
二、分包使用方法:
假设支持分包的 uni-app
目录结构如下:
┌─pages
│ ├─index
│ │ └─index.vue
│ └─login
│ └─login.vue
├─pagesA
│ ├─static
│ └─list
│ └─list.vue
├─pagesB
│ ├─static
│ └─detail
│ └─detail.vue
├─static
├─main.js
├─App.vue
├─manifest.json
└─pages.json
则需要在 pages.json 中填写
{ "pages": [{ "path": "pages/index/index", "style": { ...} }, { "path": "pages/login/login", "style": { ...} }], "subPackages": [{ "root": "pagesA", "pages": [{ "path": "list/list", "style": { ...} }] }, { "root": "pagesB", "pages": [{ "path": "detail/detail", "style": { ...} }] }], "preloadRule": { "pagesA/list/list": { "network": "all", "packages": ["__APP__"] }, "pagesB/detail/detail": { "network": "all", "packages": ["pagesA"] } } }
三、分包跳转
在需要点击跳转的地方:
uni.navigateTo({ url: '/myPackageA/pages/piece/piece' })