先要了解为什么要使用分包:
性能方面:
有时候我们的小程序太大,首次打开小程序的时候会比较慢,这个时候我们可以试试分包操作。分包可以让用户在操作小程序的时候按需下载资源(用户在进入某些页面的时候才去下载相应的资源,可以加快小程序的速度,优化用户体验)。
心情方面:
小程序代码有个2M限制,是不是有的时候放图片都得收着点放(就很烦赢),不敢把太大的放在小程序里面,只能放远程;但是随着项目不断迭代更新,代码图片越来越多,开发的时候更加小心翼翼。是不是很不舒服,还能不能让我舒服的敲代码了。
目前小程序分包大小有以下限制:
- 整个小程序所有分包大小不超过 20M
- 单个分包/主包大小不能超过 2M
官网操作:使用分包 | 微信开放文档
本人操作:
在app.json配置分包的使用:
“subpackages”该字段是声明项目分包结构
独立分包:
这里把independent改成true就是使用独立分包了!
独立分包是小程序中一种特殊类型的分包,可以独立于主包和其他分包运行。从独立分包中页面进入小程序时,不需要下载主包。当用户进入普通分包或主包内页面时,主包才会被下载。
注意看官方文档独立分包 | 微信开放文档
独立分包注意事项:
- 独立分包中不能依赖主包和其他分包中的内容,包括 js 文件、template、wxss、自定义组件、插件等(使用 分包异步化 时 js 文件、自定义组件、插件不受此条限制)
- 主包中的
app.wxss
对独立分包无效,应避免在独立分包页面中使用 app.wxss
中的样式; App
只能在主包内定义,独立分包中不能定义 App
,会造成无法预期的行为;- 独立分包中暂时不支持使用插件。
(1)关于 getApp()
与普通分包不同,独立分包运行时,App
并不一定被注册,因此 getApp()
也不一定可以获得 App
对象:
- 当用户从独立分包页面启动小程序时,主包不存在,
App
也不存在,此时调用 getApp()
获取到的是 undefined
。 当用户进入普通分包或主包内页面时,主包才会被下载,App
才会被注册。 - 当用户是从普通分包或主包内页面跳转到独立分包页面时,主包已经存在,此时调用
getApp()
可以获取到真正的 App
。
由于这一限制,开发者无法通过 App
对象实现独立分包和小程序其他部分的全局变量共享。
为了在独立分包中满足这一需求,基础库 2.2.4 版本开始 getApp
支持 [allowDefault
] 参数,在 App
未定义时返回一个默认实现。当主包加载,App
被注册时,默认实现中定义的属性会被覆盖合并到真正的 App
中。
示例代码:
const app = getApp({allowDefault: true}) // {}
app.data = 456
app.global = {}
App({
data: 123,
other: 'hello'
})
console.log(getApp()) // {global: {}, data: 456, other: 'hello'}
(2)关于 App
生命周期
当从独立分包启动小程序时,主包中 App
的 onLaunch
和首次 onShow
会在从独立分包页面首次进入主包或其他普通分包页面时调用。
由于独立分包中无法定义 App
,小程序生命周期的监听可以使用 wx.onAppShow,wx.onAppHide 完成。App
上的其他事件可以使用 wx.onError,wx.onPageNotFound 监听。
低版本兼容
在低于 6.7.2 版本的微信中运行时,独立分包视为普通分包处理,不具备独立运行的特性。
注意:在兼容模式下,主包中的 app.wxss
可能会对独立分包中的页面产生影响,因此应避免在独立分包页面中使用 app.wxss
中的样式。
查看是否分包成功
下面使用分包预加载