目录

分包是什么?

为什么要分包?

分包前后结构对比

具体操作步骤

第 1 步:规划分包结构

第 2 步:修改 app.json 进行配置

第 3 步:创建分包目录并移动文件

第 4 步:处理组件和工具函数的引用

第 5 步:重新编译并测试

进阶概念:独立分包

注意事项

已通过效果:


分包是什么?

一说到这个其实好多人就想骂了,先附上几张图(不忍直视):

小程序分包是指将完整的小程序项目划分成一个主包多个分包

  • 主包:包含小程序启动所需的核心页面(如首页、TabBar 页面)和所有分包都会用到的公共代码/资源

  • 分包:包含某些特定功能下的页面、组件、代码和资源。用户在使用到这些功能时才会下载对应的分包。

为什么要分包?

  1. 突破体积限制:小程序单个包体积限制为 2MB。使用分包后,整个小程序所有分包的总体积上限可提升至 20MB(微信小程序目前标准)。(目前一个包超过1.5mb就会提示了)

  2. 优化启动速度小程序启动时只需下载主包(通常很小),用户点击进入某个分包页面时,才去下载对应的分包代码。这大大降低了首屏加载时间。

  3. 按需加载:只有用户真正访问到某个功能时,才加载对应的代码,节省了用户流量和空间。


分包前后结构对比

举例一个电商小程序,结构如下:

(看完下面这个,我敢说基本上都能懂了,是不是简简单单?哈哈)

分包前(所有内容都在主包):

project-root/
├── app.js
├── app.json
├── app.wxss
├── pages/
│   ├── index/           # 首页 (TabBar)
│   ├── logs/            # 日志页 (TabBar)
│   ├── category/        # 分类页
│   ├── product/         # 商品详情页
│   └── profile/         # 个人中心页
├── components/
│   ├── header/          # 公共头部组件
│   └── toast/           # 公共弹窗组件
└── utils/
    └── request.js       # 公共网络请求库

分包后(按功能拆分):

project-root/
├── app.js
├── app.json
├── app.wxss
├── pages/               # 【主包】主要页面
│   ├── index/           # 首页 (TabBar,必须放主包)
│   ├── logs/            # 日志页 (TabBar,必须放主包)
│   └── profile/         # 个人中心页
├── components/          # 【主包】公共组件
│   ├── header/
│   └── toast/
├── utils/               # 【主包】公共工具库
│   └── request.js

├── packageA/            # 【分包A】商品模块
│   ├── packageA.json    # 分包A的配置文件
│   ├── pages/
│   │   ├── category/    # 分类页
│   │   └── product/     # 商品详情页
│   └── components/      # 分包A专用的组件
│       └── product-card/

└── packageB/            # 【分包B】未来可能扩展的模块
    ├── packageB.json
    └── pages/
        └── cart/        # 购物车页

具体操作步骤

第 1 步:规划分包结构

确定哪些页面是启动就必须的(放主包),哪些功能可以独立成模块(放分包)。TabBar 页面必须在主包

第 2 步:修改 app.json 进行配置

在 app.json 中新增 subpackages 或 subPackages(两者均可)字段来声明分包

// app.json
{"pages": ["pages/index/index","pages/logs/logs","pages/profile/profile" // 主包页面],"subPackages": [{"root": "packageA", // 分包的根目录名"name": "shop", // 分包的别名,用于分包异步化时引用,可省略"pages": [ // 分包内的页面路径,相对于 root 根目录"pages/category/category","pages/product/product"],"independent": false // 是否为独立分包(默认为 false)},{"root": "packageB","pages": ["pages/cart/cart"]}],"tabBar": {"list": [{"pagePath": "pages/index/index" // TabBar 页面必须在主包},{"pagePath": "pages/logs/logs" // TabBar 页面必须在主包}]},// ... 其他 window 等配置
}
第 3 步:创建分包目录并移动文件

根据你在 app.json 中的配置,在项目根目录创建分包文件夹(如 packageA),然后将对应的页面、组件、资源文件移动到这个文件夹下。

重要: 移动文件后,一定要修改 app.json 中对应的路径。原来在主包 pages 里声明的分包页面路径要删除

第 4 步:处理组件和工具函数的引用
  • 公共组件/工具(如 utils/request.js:继续放在主包,所有分包都可以直接 require 或 import

  • 分包内私有组件/工具:放在分包目录下,只能被该分包内的页面引用。

第 5 步:重新编译并测试

在微信开发者工具中点击编译,检查是否有路径错误。然后通过右上角的“编译模式”,选择“添加编译模式”,单独测试每一个分包页面,确保能正常加载和显示

进阶概念:独立分包

独立分包是分包的一种特殊类型,可以独立于主包运行,不需要下载主包

  • 特点:通常用于某些广告页、活动页等上下文独立性极强的页面。用户从独立分包页面进入小程序时,不需要下载主包,速度极快。

  • 限制独立分包不能引用主包内的任何文件(公共组件、工具库都不行)。

  • 配置将 independent 属性设为 true

// app.json
{"subPackages": [{"root": "independentModule","pages": ["pages/promotion/promotion"],"independent": true // 声明为独立分包}]
}

注意事项

  1. TabBar 页面必须放在主包中,不能在分包中定义

  2. 公共代码:所有分包都会用到的 JS 库、自定义组件、样式等,尽量放在主包中。

  3. 主包体积:要时刻关注主包的大小(开发者工具详情页可查看),因为它直接影响启动速度。主包最好控制在 1.5MB 以内,预留一些空间。

  4. 分包之间的跳转

    • 跳转到分包页面:wx.navigateTo({ url: '/packageA/pages/category/category' })

    • url 路径必须以分包根目录 root 开头

  5. 引用原则

    • 分包可以引用自己包内的组件和工具。

    • 分包可以引用主包内的组件和工具。

    • 分包不能引用其他分包内的文件

    • 主包不能引用分包内的文件

  6. 分包预加载:可以使用 preloadRule 配置在进入主包某个页面时,静默预加载可能即将用到的分包,提升后续跳转流畅度。

    // app.json
    "preloadRule": {"pages/index/index": { // 当用户从首页启动时"network": "all", // 在任意网络下都预加载"packages": ["packageA"] // 预加载 packageA 分包}
    }

    已通过效果:

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言极速入门与精要指南从零到精通的系统化学习路径

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

git 切换仓库后清理分支缓存

我明白了,从您的截图可以看到远程仓库中有 feature/v1.4_20250903 分支,但本地 git branch -r 看不到,这是因为之前更换过仓库地址后需要重新获取远程仓库的所有信息。让我们执行以下步骤来解决这个问题: 首先执行 git fetch --al…

考研倒计时101天---路由选择协议

路由选择协议:RIP 与 OSPFRIP 协议(基于距离向量算法)RIP(Routing Information Protocol)是一种内部网关协议(IGP),采用距离向量算法进行路由选择。其主要特点如下:工作机…

「类 vs 实例」对比 ,「类 - 原型 - 实例」的关系

坚持的本身就是意义 目录直观类比类 (Class) vs 实例 (Instance)对比表示例代码类 - 原型 - 实例关系图解释:类 (class Person)原型 (Person.prototype)实例 (new Person(...))总结:直观类比 类(Class) 图纸 / 模板实例&#xf…

第一课、Cocos Creator 3.8 安装与配置

介绍说明 本文主要介绍在windows系统中,安装开发Cocos使用的软件工具,主要包含:安装CocosDashboard控制面板、CocosCreator3.8编辑器和脚本编辑器 VS Code 。 一、Cocos Dashboard 的安装 说明:Cocos Dashboard 主要作用是能够同…

从航空FACE的一个落地方案漫谈汽车HPC软件架构的思维转变(2/3)FACE的“段”同Autosar的“层”概念区别探索

文章目录PART THREE:段和层的概念比较一、“段”更强调“功能闭环责任归属”,而非“单纯的层级堆叠”二、“段”规避“层”的“刚性依赖陷阱”,适配航空系统的“灵活组合需求”三、“段”贴合航空工业的“工程化语言习惯”,降低跨…

金融量化指标--6InformationRatio信息比率

InformationRatio信息比率计算公式添加图片注释,不超过 140 字(可选)一、信息比率(IR)是什么?核心概念:信息比率衡量的是投资组合经理相对于某个基准指数(Benchmark)&…

Java全栈开发面试实录:从基础到微服务的实战经验分享

Java全栈开发面试实录:从基础到微服务的实战经验分享 一、初识面试场景 我叫李明,28岁,毕业于复旦大学计算机科学与技术专业,硕士学历。在互联网行业已经有5年的工作经验,先后在两家中型互联网公司担任Java全栈开发工程…

【51单片机】【protues仿真】基于51单片机公交报站系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 主要功能如下: 1、LCD12864显示时间、日期、公交车车站、温度等 2、按键设置时间,显示公交车信息 3、串口播报相应站点信息 4、按键控制上行、下行、手动播…

第1节-PostgreSQL入门-从表中查询数据

摘要:在本教程中,你将学习如何使用 PostgreSQL 的 SELECT 语句从表中检索数据。 SELECT 语句 要从表中查询数据,需使用 PostgreSQL 的 SELECT 语句。 以下是 SELECT 语句的基本语法: SELECT column1, column2, ... FROM table_name;在这种语法中: 首先,在 SELECT 关…

【C++进阶】---- map和set的使用

1.序列式容器和关联式容器 前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间⼀般没有紧密的关联关系…

430章:Python Web爬虫入门:使用Requests和BeautifulSoup

在软件交付日益高频、用户需求快速迭代的今天,版本发布流程的规范性直接决定了团队的交付效率、产品质量和用户满意度。然而,许多团队仍面临以下痛点:发布混乱:分支管理随意,代码冲突频发;质量失控&#xf…

代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和

本文所有题目链接/文章讲解/视频讲解:https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html 454.四数相加II 有四个数组,如果要遍历则时间复杂度太大 可以选择分组,a和b一组,c和d一组 这样就可以等同于…

Vue3源码reactivity响应式篇之computed计算属性

概述 vue3中,computed函数用于表示计算属性,有惰性求值、响应式追踪依赖的特点。本文将介绍computed的实现原理以及其机制细节。 源码解析 computed计算属性和computed方法、ComputedRefImpl类以及refreshComputed方法有关。 computed方法 computed暴露给…

[嵌入式embed]Keil5烧录后STM32不自动运行,复位才能运行

[嵌入式embed]Keil5烧录后STM32不自动运行,复位才能运行Keil5-验证“Reset and Run”功能是否生效参考文章Keil5-验证“Reset and Run”功能是否生效 参考文章 Keil5烧录后STM32不自动运行?必须复位才能启动的终极解决方案

阿里云Qwen3系列模型部署微调评测

与阿里云一起轻松实现数智化让算力成为公共服务:用大规模的通用计算,帮助客户做从前不能做的事情,做从前做不到的规模。让数据成为生产资料:用数据的实时在线,帮助客户以数据为中心改变生产生活方式创造新的价值。模型…

北京鲁成伟业 | 三屏加固笔记本电脑C156F3

在工业控制、应急指挥、测控及无人机作业等对设备稳定性与环境适应性要求较高的领域,一款性能均衡且坚固耐用的计算机往往能为工作效率提供有力支撑。三屏加固笔记本电脑C156F3便是针对这类需求设计的设备,凭借多方面的特性,可满足不同场景下…

七彩氛围灯芯片EH3A01RGB驱动芯片定时开关IC方案

‍在现代智能家居和个性化照明领域,EH3A01-442A-A24F小夜灯定时芯片凭借其多功能、低功耗和灵活配置的特点,成为LED氛围灯、小夜灯及便携式照明方案的理想选择。本文将深入解析该芯片的核心功能、电气特性及应用场景,帮助开发者与用户全面掌握…

Spring Boot 项目新增 Module 完整指南

1. 模块化开发的重要性 在软件开发中,随着项目规模的不断扩大,​​模块化设计​​已成为提高代码可维护性和可复用性的关键实践。通过将大型项目拆分为多个独立模块,开发团队可以​​并行开发​​不同功能组件,降低代码耦合度&…

Git cherry-pick 与分支重置技术实现代码健全性保障下的提交记录精简

代码健全性保障:上市审查中的 Git 提交记录整理方案(核心功能提交筛选流程) 一、背景与目的 我司正处于上市筹备阶段,券商需对核心系统进行 Git 代码审查,并基于提交记录生成测试报告。由于原始提交记录包含大量细节性…