0


微信小程序分包

1.微信小程序--分包

什么是分包

  1. 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。
  2. **分包原理**:在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后再进行展示。

分包后的项目构成

  1. 分包后小程序由一个主包与多个分包组成,
  • 主包:一般只包含项目的启动页面或 TabBar 页面、以及所有分包都需要用到的一些公共资源
  • 分包:只包含和当前分包有关的页面和私有资源

2.为什么需要进行分包

  1. 微信小程序限制了代码包不能超过 2MB,限制大小是对小程序启动速度的考虑,但是2MB 大小严重限制了小程序功能的扩展,业务需求可能需要更大的体积,综合考虑微信推出了“分包加载方案”

目前小程序分包大小有以下限制

  • 整个小程序所有分包大小不超过 20M(微信小程序版本不同,大小不同)
  • 单个分包/主包大小不能超过 2M
  • 对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作

3.如何进行分包操作

配置

需要在主包的app.json中进行配置(微信小程序官方文档的示例如下)

分包后的文件列表信息如下:

** app.json中文件的配置**

  1. {
  2. "pages":[
  3. "pages/logs/logs",
  4. "pages/index/index"
  5. ],
  6. "subPackages": [
  7. {
  8. "root": "packageA",
  9. "name": "pack1",
  10. "pages": [
  11. "pages/cat/cat",
  12. "pages/dog/dog"
  13. ]
  14. },{
  15. "root": "packageB",
  16. "name": "pack2",
  17. "pages": [
  18. "pages/banana/banana",
  19. "pages/apple/apple"
  20. ],
  21. "independent": true
  22. }
  23. ],

注释 属性

  1. 属性名 类型 解释
  2. "subpackages" array 字段声明项目分包结构
  3. "root" string 分包的根路径
  4. "name" string 分包别名,分包预加载的时候使用
  5. "page" StringArray 分包页面路径,(相对于分包根节点的路径)
  6. "independent" Boolean 分包是否是独立分包

打包原则

  • 声明 subpackages 后,将按 subpackages 配置路径进行打包,subpackages 配置路径外的目录将被打包到主包中
  • 主包也可以有自己的 pages,即最外层的 pages 字段。
  • subpackage 的根目录不能是另外一个 subpackage 内的子目录
  • tabBar 页面必须在主包内

引用原则

  • packageA 无法 require packageB JS 文件,但可以 require 主包、packageA 内的 JS 文件;使用分包异步化时不受此条限制
  • packageA 无法 import packageB 的 template,但可以 require 主包、packageA 内的 template
  • packageA 无法使用 packageB 的资源,但可以使用主包、packageA 内的资源

低版本兼容

  1. 由微信后台编译来处理旧版本客户端的兼容,后台会编译两份代码包,一份是分包后代码,另外一份是整包的兼容代码。 新客户端用分包,老客户端还是用的整包,完整包会把各个
  1. subpackage

里面的路径放到 pages 中。

分包预加载

** 分包预下载目前只支持通过配置方式使用,暂不支持通过调用 API 完成。**

配置方法

  1. 预下载分包行为在进入某个页面时触发,通过在
  1. app.json

增加

  1. preloadRule

配置来控制。

  1. {
  2. "pages":[
  3. "pages/logs/logs",
  4. "pages/index/index"
  5. ],
  6. "subPackages": [
  7. {
  8. "root": "packageA",
  9. "name": "pack1",
  10. "pages": [
  11. "pages/cat/cat",
  12. "pages/dog/dog"
  13. ]
  14. },{
  15. "root": "packageB",
  16. "name": "pack2",
  17. "pages": [
  18. "pages/banana/banana",
  19. "pages/apple/apple"
  20. ],
  21. "independent": true
  22. }
  23. ],
  24. "preloadRule": {
  25. "pages/index": {
  26. "network": "all",
  27. "packages": ["pack1"]
  28. //"packages": ["packageA"] 也可以写这个
  29. },
  30. //B 是独立分包 需要单独作为根节点
  31. "packageB/index":{
  32. "packages":["_APP_"]
  33. }
  34. }
  1. preloadRule

中,

  1. key

是页面路径,

  1. value

是进入此页面的预下载配置,每个配置有以下几项:

  1. 属性名 类型 默认值 说明
  2. packages stringarray 进入小程序页面后预加载的分包的rootname_APP_代表主包
  3. network string wifi 在指定网络下预加载(all 不限网络 wifiwifi下预加载)

限制

  1. 同一个分包中的页面享有共同的预下载大小限额 2M,限额会在工具中打包时校验。
  2. 如,页面 A B 都在同一个分包中,A 中预下载总大小 0.5M 的分包,B中最多只能预下载总大小 1.5M 的分包。

分包异步化

  1. 在小程序中,不同的分包对应不同的下载单元;因此,除了非独立分包可以依赖主包外,分包之间不能互相使用自定义组件或进行
  1. require

。「分包异步化」特性将允许通过一些配置和新的接口,使部分跨分包的内容可以等待下载后异步使用,从而一定程度上解决这个限制。

兼容性

  1. 该特性需要基础库版本 2.11.2 或以上,使用该特性的小程序在 2.11.2 以下的基础库上可能无法工作,如果发布正式版本,可以考虑将最低基础库版本设置为 2.11.2 或以上。
  2. 各平台支持的最低版本


本文转载自: https://blog.csdn.net/m0_47298312/article/details/126753782
版权归原作者 黑面饺子皮 所有, 如有侵权,请联系我们删除。

“微信小程序分包”的评论:

还没有评论