uni-app 小程序分包

小程序创建完成后,只有一个主包
image.png

分包原因

  • 大部分小程序要求压缩包体积不能大于 2M,否则无法真机运行,真机调试和发布
  • 基本当小程序超过2M之后 就需要进行分包
  • 分包后可解决 2M 限制,并且能分包加载内容,提高性能
  • 各平台目前对分包个数没有限制

加载说明

主包:小程序首次启动的时候,默认就会加载的包,在没有分包的情况下整个工程就可以看做是一个主包,小程序为了支撑起第一次启动后页面的展示,会加载所有的包资源,不管页面中有些模块有没有用得到,都会加载,这样势必就会导致在首次启动的时候,由于包的体积过大,加载时间过长,造成用户体验就不是很好,考虑到这一个层面,各家的小程序包都是有大小限制的,因为你不能让小程序变得臃肿得像个APP,那样就失去了小程序轻巧、方便的意义了
子包(分包):为了避免在第一次启动的时候,加载的主包过大,这个时候我们就可以考虑将主包进行拆分,拆分为一些小的子包,这样在启动的时候,我们只要加载主包,足够支撑第一次页面展现即可,在后续点击子模块的时候,再逐个根据需要加载对应的子包,这样就避免了主包过大的问题。当然每个子包也是有大小限制的。

各平台小程序包大小限制说明

  • 微信小程序每个分包的大小是2M,总体积一共不能超过20M。
  • 百度小程序每个分包的大小是2M,总体积一共不能超过8M。
  • 支付宝小程序每个分包的大小是2M,总体积一共不能超过8M。
  • QQ小程序主包大小不能超过 4M,单个分包大小无限制,总体积一共不能超过20M。
  • 字节小程序单个主包不超过 4M,单个分包大小无限制,总体积一共不能超过20M(字节小程序基础库 1.88.0 及以上版本开始支持,字节小程序开发者工具请使用大于等于 2.0.6 且小于 3.0.0 的版本)。

分包大小可能会更改,分档可能更新不及时,附带相关分包信息超链接,方便自行查看

分包方式

目录结构

┌─uniCloud              云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb [详见uniCloud]
│─components            符合vue组件规范的uni-app组件目录
│  └─comp-a.vue         可复用的a组件
├─hybrid                App端存放本地html文件的目录
├─platforms             存放各平台专用页面的目录
├─pages                 业务页面文件存放的目录  /  主包
│  ├─static             分包可以拥有自己独立的static目录,用来对静态资源进行分包
│  ├─index
│  │  └─index.vue       index页面
│  └─list
│     └─list.vue        list页面
├─pagesA                 业务页面文件存放的目录 / 分包A
│  ├─static             分包可以拥有自己独立的static目录,用来对静态资源进行分包
│  ├─index
│  │  └─index.vue       index页面
│  └─list
│     └─list.vue        list页面
├─pagesB                 业务页面文件存放的目录 / 分包B
│  ├─static             分包可以拥有自己独立的static目录,用来对静态资源进行分包
│  ├─index
│  │  └─index.vue       index页面
│  └─list
│     └─list.vue        list页面
├─static                存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─uni_modules           存放[uni_module](/uni_modules)规范的插件。
├─wxcomponents          存放小程序组件的目录
├─main.js               Vue初始化入口文件
├─App.vue               应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json         配置应用名称、appid、logo、版本等打包信息
├─pages.json            配置页面路由、导航条、选项卡等页面类信息
└─uni.scss              这里是uni-app内置的常用样式变量 

常规分包

  • 开发者通过在 app.json subpackages 字段声明项目分包结构
  • 特点:
  1. 加载小程序的时候先加载主包,当需要访问分包的页面时候才加载分包内容
  2. 分包的页面可以访问主包的文件,数据,图片等资源
  3. 主包:
    1). 主包来源: 除了分包以外的内容都会被打包到主包中
    2). 通常放置启动页/tabBar 页面

独立分包

  • 设置 independent 为 true
  • 特点 :

独立分包可单独访问分包的内容,不需要下载主包
独立分包不能依赖主包或者其他包的内容

  • 使用场景

通常某些页面和当前小程序的其他页面关联不大的时候可进行独立分包
临时加的广告页 或者 活动页

  • 限制

独立分包属于分包的一种。普通分包的所有限制都对独立分包有效。独立分包中插件、自定义组件的处理方式同普通分包。
此外,使用独立分包时要注意:

  • 独立分包中不能依赖主包和其他分包中的内容**,包括 js 文件、template、wxss、自定义组件、插件等(使用 分包异步化 时 js 文件、自定义组件、插件不受此条限制)
  • 主包中的 app.wxss 对独立分包无效,应避免在独立分包页面中使用 app.wxss 中的样式;
  • App 只能在主包内定义,独立分包中不能定义 App,会造成无法预期的行为;
  • 独立分包中暂时不支持使用插件。

分包预下载

  • 配置

app.json 中设置 preloadRule 选项
key(页面路径 ): {packages: [ 预下载的包名 || 预下载的包的根路径 ])}

  • 特点

在加载当前包的时候可以设置预下载其他的包
缩短用户等待时间,提高用户体验

  • 限制

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

编辑page.json文件 配置项列表

{
    //主包的路由配置
   "pages": [{
        "path": "pages/index/index",
        "style": {
            "navigationBarTitleText": "主包"
        }
    }],
    //定义好子包,可以包含多个子包
    "subPackages": [{
         //A包的根路径,各个子页面访问路由是:root路径 + 子页面的path
       "root": "pagesA",
        "pages": [{
            "path": "modular1/index1",
            "style": { }
        }, {
            "path": "modular1/index2",
            "style": { }
        }]
    }, {
        "root": "pagesB",
        "pages": [{
            "path": "modular1/menu1",
            "style": { }
        }]
    }],
    //定义预加载
    "preloadRule": {
        //当访问到该路由的页面时,会顺带预加载对应的包(可以是主包,也可以是子包)
        "pages/index/index": {
            "network": "all",
            "packages": ["pagesB"]
        }
    }
}
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容