历史总结:
项目背景
我们的微信小程序项目选用的技术栈是:原生 + 内嵌H5,目前的本地代码包1494 KB,上传上传的1121 KB。
小程序限制每个包的大小不能超过 2M,小程序过大,可以进行分包加载,但是每个分包的大小限额 2M,总包大小不能超过 12M。
而我们这次需要添增一个较大的功能模块,随之而来的是该项目的包越来越大,本着万痛不如早痛的原则,这次新增的模块,采用分包加载。
分包
分包限制须知
因为分包限制,tabBar页面必须在app(主包)内,然而我们新增的模块,首页就在tabBar, 所以除了新增模块的首页放到主包内,它页面都放到 packageWork 新包内。
使用分包
├── app.js
├── app.json
├── app.wxss
├── packageWork
│ └── pages
│ ├── field_clock
│ └── field_object
├── pages
│ ├── work
│ ├── field_clock
│ └── logs
└── utils
开发者通过在 app.json subpackages 字段声明项目分包结构:
{
"pages": [
"pages/index/index",
"pages/volunteer-index/index",
"pages/my/index",
"pages/work/index"
…
],
"tabBar": {
"list": [
…
{
"pagePath": "pages/work/index",
"text": "工作",
"iconPath": "/img/bar/appeal.png",
"selectedIconPath": "/img/bar/appeal_cur.png"
},
{
"pagePath": "pages/my/index",
"text": "我的",
"iconPath": "/img/bar/my.png",
"selectedIconPath": "/img/bar/my_cur.png"
}
]
},
"subpackages": [
{
"root": "package-work",
"pages": [
"pages/field_object/index",
"pages/add_field_object/index",
"pages/field_clock/index"
]
}
]
}
subpackages 中,每个分包的配置有以下几项:
字段 | 类型 | 说明 |
---|---|---|
root | String | 分包根目录 |
name | String | 分包别名,分包预下载时可以使用 |
pages | StringArray | 分包页面路径,相对与分包根目录 |
independent | Boolean | 分包是否是独立分包 |
这里我们没有使用独立分包
采用分包预下载
在tabBar里配置的,这里配置当打开主包 work首页
的时候,进行工作模块分包预下载。
"preloadRule": {
"pages/work/index": {
"network": "all",
"packages": [
"package-work"
]
}
}
主包页面如何跳转到分包页面
我们将以上都配置好,就做好了分包的相关配置,接下来,我们进行开发主包的页面要跳转到分包的页面,是怎样跳转的呢。
<navigator class="btn" url="../../package-work/pages/field_clock/index">跳转到分包页面</navigator>
上传试试,分了两个包:主包 + packageWork。
分包的配置很简单,需要我们关注的是,分包的实现原理?作为思考题,欢迎留言讨论呀。