记一次微信小程序项目分包,以及分包预下载

3,597 阅读2分钟

历史总结:

项目背景

我们的微信小程序项目选用的技术栈是:原生 + 内嵌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。

分包的配置很简单,需要我们关注的是,分包的实现原理?作为思考题,欢迎留言讨论呀。