微信小程序---分包操作

有时候我们的小程序太大,首次打开小程序的时候回比较慢,这个时候我们可以试试分包操作。分包可以让用户在操作小程序的时候按需下载资源(用户在进入某些页面的时候才去下载相应的资源,可以加快小程序的速度,优化用户体验)。

小程序代码有个2M限制,是不是有的时候放图片都得忍着点,不敢把太大的放在小程序里面,只能放远程;但是随着项目不断迭代更新,代码图片越来越多,开发的时候更加小心翼翼。是不是很不舒服,还能不能让我舒服的敲代码了。

那就说一下分包的限制吧;分包以后单独包最大不能超过2M;整个小程序可以达到20M;比那2M限制翻了10倍;那就让我们愉快地敲代码吧。

打包原则:

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

引用原则:

  • packageA 无法 require packageB JS 文件,但可以 require app、自己 package内的 JS 文件
  • packageA无法import packageB 的 template,但可以require app、自己 package内的 template
  • packageA 无法使用 packageB 的资源,但可以使用 app、自己 package 内的资源

1.首先在app.json里面全局配置里面配置分包:(subpackages 属性和pages同级)

我在根路径创建了两个分包,分别是homepay

  "pages": [
    "pages/index/index",
    "pages/user/index",
  ],
  "subpackages":[
    {
      "root":"template/home", //分包的根路径,彼此之间不可以重复
      "name":"home",  	//分包的标识名字,用于预加载分包时用
      "pages":[			//分包的路径(不预加载的时候,用户进入分包路径才会加载分包资源)
        "shop_house/shop_house"
      ],
      "independent":false   //是否独立分包(可以不加载主包就独立加载的包,独立分包不能当做全局资源)
    },
    {
      "root":"template/pay",
      "name":"pay",
      "pages":[
        "pay_house/pay_house"
      ],
      "independent":false
    }
  ],

2.创建文件

template是存放分包的文件夹。homepay这两个文件夹分别是template的子文件夹,里面可以放图片等其他资源和页面。
注意:静态资源哪个模块的就放哪个包下,不要共享,共享就会变成主包里的资源。这也就是为什么不直接把images文件放在template根路径的原因
在这里插入图片描述

3.查看分包效果

在这里插入图片描述

4.主包与分包之间的页面跳转

1)主包跳转到分包

注意:跳转的路径要带上分包里配置的root这一级(所有的相对路径全部写上),不然它找不到路径就会报错

主包:

<!--pages/user/index.wxml-->
<text>pages/user/index.wxml</text>
<image src="../images/1.jpeg"></image>
<navigator url="../../template/home/shop_house/shop_house">跳转shopping_house</navigator>
<navigator url="../../template/pay/pay_house/pay_house">跳转pay_house</navigator>

在这里插入图片描述
分包:

<!--template/pay/pay_house/pay_house.wxml-->
<text>template/pay/pay_house/pay_house.wxml</text>
<image src="../images/3.jpeg"></image>

在这里插入图片描述

2)分包跳转到主包

分包跳转到主包(方法很多种,我这里说两种)

  • wx.switchTab(Object object)
    跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,路径后不能带参数。
    此方法跳转的页面必须是在tabBar定义过的页面

  • wx.reLaunch(Object object)
    关闭所有页面,打开到应用内的某个页面,路径后面可带参数。

分包:
点击“去首页”,这样就直接去主页了

<navigator open-type="switchTab" url="/pages/index/index">去首页</navigator>

在这里插入图片描述

### 关于微信小程序插件分包的实现与常见问题解决方案 #### 一、微信小程序插件分包的概念 微信小程序支持通过分包加载来优化应用启动速度和资源管理效率。对于插件而言,其本身并不直接支持分包功能,但如果插件被嵌入到一个启用了分包的小程序中,则需要特别注意如何适配宿主小程序的分包机制[^1]。 --- #### 二、插件在分包中的使用注意事项 当插件集成至启用分包的小程序时,可能会遇到权限不足或其他运行错误的情况。以下是几个常见的场景及其对应的解决办法: 1. **页面跳转失败** 如果插件内部尝试执行 `wx.navigateTo` 跳转操作,而目标页面位于宿主小程序的不同分包中,可能触发如下错误: ``` navigateTo:fail rejected due to no permission currently ``` 这是因为跨分包跳转需要显式声明路径关系。可以通过修改宿主小程序的配置文件 `project.config.json` 来定义合法的目标路径。 配置示例: ```json { "miniprogramRoot": "./", "setting": { "urlCheck": true, "es6": true, "postcss": true, "minify": true }, "subpackages": [ { "root": "packageA", // 子包目录名 "pages": ["index"] // 子包内的页面列表 } ] } ``` 2. **依赖冲突** 若多个子包均需调用同一插件的功能,可能出现重复初始化或数据共享异常的现象。建议采用单例模式设计插件逻辑,确保每次调用都基于统一的状态上下文[^3]。 3. **性能优化** 对于大型插件,可以考虑将其核心业务拆分为独立模块,并按需动态加载部分组件而非一次性全部引入。这样既能减少初始体积又能提升用户体验流畅度[^2]。 --- #### 三、具体实现案例分析 假设我们需要在一个多分包结构的小程序里接入第三方日历控件作为插件形式存在,下面展示完整的流程步骤: ##### 步骤说明(伪代码) ```javascript // 定义公共接口供各分包访问 App({ globalData: { calendarInstance: null }, onLaunch() { const CalendarPlugin = require('path/to/calendar-plugin'); this.globalData.calendarInstance = new CalendarPlugin(); } }); // 分包 A 中调用方式 Page({ onLoad(options){ getApp().globalData.calendarInstance.showToday(); } }); ``` 上述例子展示了如何利用全局变量存储单一实例对象从而避免多次创建带来的开销问题。 --- #### 四、总结 综上所述,在处理微信小程序插件与分包之间的协作过程中需要注意以下几个方面:合理规划路由映射表;妥善解决潜在的数据同步难题;最后还要兼顾整体架构上的可扩展性和维护便利性等问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值