微信小程序分包及案例

news2025/1/25 9:14:05

文章目录

  • 5. 分包
  • 6. 独立分包
  • 7. 分包预下载
  • 8. 案例-自定义tabbar

5. 分包

分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用
时按需进行加载。

  • 可以优化小程序首次启动的下载时间
  • 在多团队共同开发时可以更好的解耦协作

分包后,小程序项目由1个主包+多个分包组成:

  • 主包:一般只包含项目的启动页面或TabBar页面、以及所有分包都需要用到的一些公共资源
  • 分包:只包含和当前分包有关的页面和私有资源

目前,小程序分包的大小有以下两个限制:

  • 整个小程序所有分包大小不超过16M(主包+所有分包)
  • 单个分包/主包大小不能超过2M
// 小程序的目绿结构
- app.js
- app.]son
- app.wxss 
- pages // 主包的所有页面
	- index
	- logs
- packageA // 第一个分包
	- pages// 第一个分包的所有页面
		- cat
		- dog
- packageB // 第二个分包
	- pages// 第二个分包的所有页面
		- apple
		- banana
- utils
// app.json
"pages":[							//主包的所有页面
	"pages/index",
	"pages/logs"
],
"subpackages":[						// 通过subpackages节点,声明分包的结构
    {
        "root":"packageA”,			// 第一个分包的根目录
        "pages":[					// 当前分包下,所有页面的相对存放路径
            "pages/cat",
            "pages/dog"
        ]
    },{
        "root":"packageB”,			// 第二个分包的根目录
        "name":"pack2",				// 分包的别名
        "pages”:[					// 当前分包下,所有页面的相对存放路径
            "pages/apple",
            "pages/banana"
        ]
       }
 ]

打包原则

  1. 小程序会按subpackages的配置进行分包,subpackages之外的目录将被打包到主包中
  2. 主包也可以有自己的pages(即最外层的pages字段)
  3. tabBar页面必须在主包内
  4. 分包之间不能互相嵌套

引用原则

  1. 主包无法引用分包内的私有资源
  2. 分包之间不能相互引用私有资源
  3. 分包可以引用主包内的公共资源

6. 独立分包

独立分包本质上也是分包,只不过它比较特殊,可以独立于主包和其他分包而单独运行。

独立分包和普通分包的区别:最主要的区别是否依赖于主包才能运行

  • 普通分包必须依赖于主包才能运行
  • 独立分包可以在不下载主包的情况下,独立运行

开发者可以按需,将某些具有一定功能独立性的页面配置到独立分包中。原因如下:

  • 当小程序从普通的分包页面启动时,需要首先下载主包
  • 而独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度
// app.json
 "independent": true // 配置后即可独立分包

独立分包和普通分包以及主包之间,是相互隔绝的,不能相互引用彼此的资源!

7. 分包预下载

分包预下载指的是:在进入小程序的某个页面时,由框架自动预下载可能需要的分包,从而提升进入后续分包
页面时的启动速度。

预下载分包的行为,会在进入指定的页面时触发。在app.json中,使用preloadRule节点定义分包的预下载
规则,示例代码如下:

{
    "preloadRule":{					//分包预下载的规则
        "pages/contact/contact":{	//触发分包预下载的页面路径
            //network表示在指定的网路模式下进行预下载,
            //可选值为:a11(不限网路)和wifi(仅wifi模式下进行预下载)
            //默认值为:wifi
            "network":"all",
            //packages表示进入页面后,预下载厚些分包
            //可以通过root或name指定预下载系些分包
            "packages":["pkgA"]
   		 }
    }
}

同一个分包中的页面享有共同的预下载大小限额2M

img !img

8. 案例-自定义tabbar

自定义 tabBar | 微信开放文档 (qq.com)

<!--custom-tab-bar/index.wxml-->

<van-tabbar active="{{active}}" bind:change="onChange"  active-color="#07c160">
  <van-tabbar-item wx:for="{{list}}" wx:key="index" info="{{item.info?item.info:''}}">
    <image slot="icon" src="{{item.iconPath}}"  mode="aspectFit" style="width: 25px; height: 25px;" />
    <image slot="icon-active" src="{{item.selectedIconPath}}"  mode="aspectFit" style="width: 25px; height: 25px;" />
    {{item.text}}
  </van-tabbar-item>
</van-tabbar> 

MobX | 微信开放文档 (qq.com)

// custom-tab-bar/index.js
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../store/store'

Component({
  // vat tabbar图标与文字的margin去掉
  options: {
    styleIsolation: 'shared'
  },
  behaviors: [storeBindingsBehavior],
  properties: {
  },
  storeBindings: {
    store,
    fields: {
      sum: 'sum',
      active:'activeTabBarIndex'
    },
    actions: {
      updateActive:'updateActiveTabBarIndex'
    }
  },
  observers:{
     // 信息tab的微标与 store里面的sum绑定
    'sum':function(val){
      console.log(val)
      this.setData({
        'list[1].info':val
      })
    }
  },
  data: {
    "list": [
      {
        "pagePath": "/pages/home/home",
        "text": "首页",
        "iconPath": "/images/home.png",
        "selectedIconPath": "/images/home_act.png"
      },
      {
        "pagePath": "/pages/message/message",
        "text": "信息",
        "iconPath": "/images/message.png",
        "selectedIconPath": "/images/message_act.png",
        info: 2
      },
      {
        "pagePath": "/pages/contact/contact",
        "text": "联系人",
        "iconPath": "/images/contact.png",
        "selectedIconPath": "/images/contact_act.png"
      }
    ]
  },

  methods: {
    onChange(event) {
      // event.detail 的值为当前选中项的索引
      // this.setData({ active: event.detail })
      this.updateActive(event.detail)
      wx.switchTab({
        url: this.data.list[event.detail].pagePath,
      })
    },
  }
})
/* custom-tab-bar/index.wxss */
.van-tabbar-item{
  --tabbar-item-text-color:1
}
// store/stroe.js
// es6按需导入
import { action, observable } from 'mobx-miniprogram'
// es6按需导出
export const store = observable({
  // 数据字段
  numA: 1,
  numB: 2,
  activeTabBarIndex: 0,
  //计算属性
  get sum() {
    return this.numA + this.numB
  },
  // actions 方法,用来修改store 找那个的数据
  updateNum1: action(function (step) {
    this.numA += step
  }),
  updateNum2: action(function (step) {
    this.numA += step
  }),
  updateActiveTabBarIndex: action(function (index) {
    this.activeTabBarIndex = index
  })
})

以上案例知识点:组件间通信、组件behaviors、全局数据共享的知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信公众号开发—扫描二维码实现登录方案

&#x1f60a; 作者&#xff1a; 一恍过去&#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390&#x1f38a; 社区&#xff1a; Java技术栈交流&#x1f389; 主题&#xff1a; 微信公众号开发—扫描二维码实现登录方案⏱️ 创作时间&#xff1a; 2022…

非零基础自学Golang 第13章 并发与通道 13.1 概述

非零基础自学Golang 文章目录非零基础自学Golang第13章 并发与通道13.1 概述13.1.1 并行与并发13.1.2 Go并发优势第13章 并发与通道 并发是指在同一段时间内&#xff0c;程序可以执行多个任务。 随着社会需求的发展&#xff0c;光靠硬件的提升是无法满足高并发的需求的&#…

[前端攻坚]:数组去重的几种方法

总结一些日常需要用到的一些api&#xff0c;也是在一些面试中会经常出现的题目&#xff0c;今天分享的是数组去重的几个不同的方法&#xff0c; 同时文章也被收录到我的《JS基础》专栏中&#xff0c;欢迎大家点击收藏加关注。 数组去重的方法 1.set去重 2.map去重 3.for循环in…

Python安装Pycrypto

前言 安装 使用以下命令安装 pip install pycrypto2.6.1报错 如果在安装过程中出现如下错误 则说明系统缺乏相应python开发包&#xff0c;需要进行安装对应的python开发包 解决 在CentOS下&#xff0c;如果是python2.7则使用如下命令安装 yum install python-devel是pyt…

Pytest用例运行及规范

温馨提示 本篇约1600字&#xff0c;看完需3-5分钟&#xff0c;学习学半小时&#xff0c;加油&#xff01; 先看普通函数运行顺序 import pytestdef test_one():print("我是清安")def test_02():print("--02--")def test_a():print("--a--")de…

BP神经网络的最简Python实现

文章目录神经元BP原理及实现测试BP&#xff0c;就是后向传播(back propagation)&#xff0c;说明BP网络要向后传递一个什么东西&#xff0c;这个东西就是误差。 而神经网络&#xff0c;就是由神经元组成的网络&#xff0c;所以在考虑BP之前&#xff0c;还不得不弄清楚神经元是…

endata 电影票房响应数据破解

本文仅供参考学习&#xff0c;如有侵权可联系本人 目标网站 aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s加密入口分析 在异步请求那里可以看到请求接口&#xff0c;请求参数并未加密只是响应内容进行了加密&#xff0c;暂时也无法判断加密方…

JavaWeb的Servlet学习之Request03

目录 1.Request 1.1Request执行流程 1.2request对象和response对象的原理 1.3 request对象继承体系结构 1.4request功能&#xff1a; 1.3.1获取请求消息数据 1.获取请求行数据 2.获取请求头 3.获取请求体数据 4.其他功能 4.1获取请求参数通用方式&#xff1a;不论get…

开源CA搭建-基于openssl实现数字证书的生成与分发

目录 一、前言 二、openssl介绍 三、openssl的常用用法 &#xff08;一&#xff09;单向加密 &#xff08;二&#xff09;生成随机数 &#xff08;三&#xff09;生成公钥&#xff0c;私钥 1.生成私钥 2.提取公钥 四、搭建CA &#xff08;一&#xff09;创建根CA私钥…

Linux的camera驱动 摄像头调试方法

CameraInfo类用来描述相机信息&#xff0c;通过Camera类中getCameraInfo(int cameraId, CameraInfo cameraInfo)方法获得&#xff0c; 主要包括以下两个成员变量facing&#xff0c;facing 代表相机的方向&#xff0c; 它的值只能是CAMERA_FACING_BACK&#xff08;后置摄像头&am…

Golang 【basic_leaming】1 基本语法

阅读目录Go 语言变量Go 语言 - 声明变量1. 标准格式2. 批量格式Go 语言 - 初始化与定义变量1. 标准格式2. 编译器推导类型格式3. 短变量声明与初始化Go语言 - 多变量同时赋值Go 语言 - 匿名变量参考资料Go 语言整型&#xff08;整数类型&#xff09;1 自动匹配平台的 int 和 un…

新项目为什么决定用 JDK 17了

大家好&#xff0c;我是风筝。公众号「古时的风筝」&#xff0c;专注于后端技术&#xff0c;尤其是 Java 及周边生态。文章会收录在 JavaNewBee 中&#xff0c;更有 Java 后端知识图谱&#xff0c;从小白到大牛要走的路都在里面。 最近在调研 JDK 17&#xff0c;并且试着将之前…

阴差阳错,阴阳之变

北京的第一批“杨康”们已经返回到工作岗位&#xff0c;这其中就包括我。简单总结一下我的感染和康复过程&#xff0c;给大家做个样本吧。我属于北京放开的第一波感染者&#xff0c;12.9日当天感觉嗓子干&#xff0c;毫不犹豫&#xff0c;果然是中招了&#xff1b;周末开始发烧…

特朗普发行NFT惹群嘲,上线售罄现“真香定律”

文/章鱼哥出品/陀螺财经特朗普14日在其创建的社交平台truth social上发帖称&#xff0c;“美国需要一个超级英雄”。他还预告自己将于当地时间15日宣布“重大消息”。据《新闻周刊》报道&#xff0c;特朗普当日在其社交平台上发了一段十几秒的视频&#xff0c;里面有一个他站在…

Windows实时运动控制软核(三):LOCAL高速接口测试之C++

今天&#xff0c;正运动小助手给大家分享一下MotionRT7的安装和使用&#xff0c;以及使用C对MotionRT7开发的前期准备。 01 MotionRT7简介 MotionRT7是深圳市正运动技术推出的跨平台运动控制实时内核&#xff0c;也是国内首家完全自主自研&#xff0c;自主可控的Windows运动控…

Linux搭建测试环境详细步骤

本文讲解如何在Linux CentOS下部署Java Web项目的步骤 环境准备 &#xff08;1&#xff09;Linux系统&#xff08;2&#xff09;JDK&#xff08;3&#xff09;Tomcat &#xff08;4&#xff09;MySQL工具下载 一、Linux系统 本文主要是Linux CentOS7为例 自己在家练习小项…

[拆轮子] PaddleDetection 中的 COCODataSet 是怎么写的

今日&#xff0c;辗转反侧&#xff0c;该&#x1f4a9;的代码就是跑不成功&#xff0c;来看看 COCODataSet 到底是怎么写的&#xff0c;本文只参考当前版本的代码&#xff0c;当前版本 PaddleDetection2.5 COCODataSet 源码见附录 COCODataSet 类内部就三个函数&#xff1a; …

词义和词义消歧

Synsets(“synonym sets”, effectively senses) are the basic unit of organization in WordNet.同义词集 对于许多应用程序&#xff0c;我们希望消除歧义 • 我们可能只对一种含义感兴趣 • 在网络上搜索chemical plant 化工厂&#xff0c;我们不想搜到香蕉中的化学物质 所以…

【SpringBoot扩展点】 容器刷新前回调ApplicationContextInitializer

本文将作为Spring系列教程中源码版块的第一篇&#xff0c;整个源码系列将分为两部分进行介绍&#xff1b;单纯的源码解析&#xff0c;大概率是个吃力没人看的事情&#xff0c;因此我们将结合源码解析&#xff0c;一个是学习下别人的优秀设计&#xff0c;一个是站在源码的角度看…

【MySQL】索引和事务重点知识汇总

目录1.索引:1.1 索引的使用:1.2 索引背后的核心数据结构:1.2.1 先认识 B 树(N叉搜索树):1.2.2 再认识 B 树(N叉搜索树):2.事务:2.1 隔离性:2.1.1 脏读问题:2.1.2 不可重复读问题:2.1.3 幻读问题:2.1.4 总结:2.1.5 隔离级别:1.索引: 索引存在的意义就是为了提高查询到效率.索引…