首页 > 编程语言 >微信小程序包大小超过2M的解决方法—分包加载

微信小程序包大小超过2M的解决方法—分包加载

时间:2023-04-06 10:01:23浏览次数:58  
标签:index 程序 微信 app 程序包 分包 2M pages 加载

小程序的包被限制在2M以下, 超出的时候点击预览, 发现报错:

Error: 代码包大小为 3701 kb,上限为 2048 kb,请删除文件后重试

解决方法:

1. 优化代码, 删除掉不用的代码

2. 图片压缩或上传服务器

一般图片所占空间较大,尽量不要放在小程序本地文件夹中,如果图片不多我们也可以对图片进行压缩,我经常使用的图片压缩平台:点击这里

也可以将图片上传到服务器上,进行外链引用, 我们使用的是阿里云oss存储, 另外也可以通过图片托管平台对图片进行托管, 我找到的的图片托管平台:点击此处

另外, 通过cli命令创建的uni app项目,可将图片或字体图标放入assets文件夹下,通过require引入, 也可减少主包大小

3. 分包加载

官方推出小程序分包加载这一功能,对于万千小程序开发者来说这无疑是天大的喜讯,关于如何分包,微信官方文档已经解释的十分清楚,在进行分包之前建议认真阅读官方文档

 

对于用户来说,小程序的加载流程变成了:

1,首次启动,加载小程序主包,显示主包内的页面
2,如果用户进入了某个分包的页面,再加载这个对应分包,显示分包的页面

采用分包加载,对于开发者而言,能使小程序有更大的代码体积,承载更多的功能和服务,对于用户而言,可以更快的打开小程序,同时再不影响启动速度的前提下使用更多功能。

分包的划分:

在配置前首先需要开发者规划下各个分包需要容纳的内容,建议开发者按照功能划分的原则,将同一个功能下的页面和逻辑放置于同一个目录下,对于一些跨功能之间的公共逻辑,将其放置于主包下,这样可以确保在分包引用这部分功能时,这部分的逻辑一定存在。

在分包划分时,应该注意以下事项:

1,避免分包与分包之间引用上的耦合。因为分包的加载是用户操作触发的,并不能确保其分包加载时,
另一个分包就一定存在,这个时候可能导致js逻辑异常,某些资源找不到的错误;
2,一些公共用到的自定义组件,需要放在主包内;
3,使用小程序自带的tab切换时,list中的页面需要放在主包内。

分包的配置:(微信客户端 6.6.0,基础库 1.7.3 及以上版本开始支持。)

当理清了分包的划分后,就可以进行分包的配置了,这一步并不复杂。

假设支持分包的小程序目录结构如下:

├── app.js
├── app.json
├── app.wxss
├── packageA
│   └── pages
│       ├── cat
│       └── dog
├── packageB
│   └── pages
│       ├── apple
│       └── banana
├── pages
│   ├── index
│   └── logs
└── utils

开发者通过在 app.jsonsubPackages字段声明项目分包结构:

{
  "pages":[
    "pages/index",
    "pages/logs"
  ],
  "subpackages": [
    {
      "root": "packageA",
      "pages": [
        "pages/cat",
        "pages/dog"
      ]
    }, {
      "root": "packageB",
      "name": "pack2",
      "pages": [
        "pages/apple",
        "pages/banana"
      ]
    }
  ]
}

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

  • 整个小程序所有分包大小不超过 20M
  • 单个分包/主包大小不能超过 2M

低版本兼容:

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

示例项目:

下载 小程序示例(分包加载版)源码

 

接下来简单介绍一下在不同框架中的使用:

1、在uni app中:

 uni app通过cli初始化的小程序目录结构如下:

 ├── src     ├── main.js     ├── App.vue     ├── pages.json     ├── manifest.json     ├── orderPackages     │   └── pages     │       ├── goodsDetail     │       └── myorder     ├── pages     │   ├── index     │   └── user     └── utils

需在pages.json中配置 subPackages 字段:

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页"
      }
    },
    {
      "path": "pages/user/user",
      "style": {
        "navigationBarTitleText": "个人中心"
      }
    }
  ],
  "subPackages": [{
    "root": "orderPackages",
    "pages": [{
        "path": "pages/goodsDetail/goodsDetail",
        "style": {
          "navigationStyle": "custom"
        }
      },
      {
        "path": "pages/myorder/myorder",
        "style": {
          "navigationBarTitleText": "我的订单"
        }
      }
    ]
  }]
}

在页面中跳转分包页面路径:

uni.navigateTo({
     url: `/orderPackages/pages/order/order`
})

 

2、在taro中:

taro初始化的小程序目录结构如下:

 ├── src     ├── app.js     ├── app.scss     ├── index.html     ├── packageA     │   └── pages     │       ├── goodsDetail     │       └── myorder     ├── pages     │   ├── index     │   └── user     └── utils

需在app.js中配置 subPackages 字段:

config = {
    pages: [
      'pages/index/index',
      'pages/user/user'
    ],
    subPackages: [
      {
        'root': 'packageA',
        'pages': [
          'pages/goodsDetail/goodsDetail',
          'pages/myorder/myorder'
        ]
      }
    ]
  }

在页面中跳转分包页面路径:

taro.navigateTo({
     url: `/orderPackages/pages/order/order`
})

以上只罗列了uni app和taro框架分包加载的步骤, 原生小程序分包方法根据官方文档即可快速实现,小程序框架虽多, 大都大同小异,如果后续有使用其他框架进行开发,会进行补充。

标签:index,程序,微信,app,程序包,分包,2M,pages,加载
From: https://www.cnblogs.com/joe235/p/15696414.html

相关文章

  • 微信公众号 过滤 typescript cheerio
    E:\公众号文章采集\fi_filter_过滤器\src\exact_新浪博客手机版提取连接.jsconstfs=require('fs');constjsdom=require('jsdom');const{JSDOM}=jsdom;fs.readdir('./html',function(err,files){files.forEach((file)=>{fs.read......
  • 用python的pywinauto组件控制微信Windows版
    使用pywinauto组件可以比较容易的操纵微信Windows版进行信息发送和接受 前提如下1、已经安装有关python组件。2、微信已经打开和登录,下面的代码不负责登录操作。3、微信版本3.9.2.23具体实现有两个类1、帮助类HelperimportdatetimeclassHelper:"""帮助类......
  • PrometheusAlert微信报警模板示例
    配置入口如下: 代码配置:{{$var:=.externalURL}}{{range$k,$v:=.alerts}}{{ifeq$v.status"resolved"}}[PROMETHEUS-恢复信息]({{$v.generatorURL}})>**[{{$v.labels.alertname}}]({{$var}})**><fontcolor="info">开......
  • 微信小程序Server端环境配置
    源码地址:https://github.com/Tinywan/PHP_Experience主要内容:1.SSL免费证书申请步骤2.NginxHTTPS配置3.TLS1.2升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请SSL证书小程序也要求 TLS(传输层安全协议)的版本至少为 1.2,在配置......
  • 微信接口开发之高级篇系列【网页授权接口】
    【1】带微信帐号的手机 【2】打开浏览器,这里以IE为例。     输入:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login【3】用手机登录你的微信,使用微信中的“扫一扫”功能,扫描上面网页中的二维码。在手机上会出现以下界面:......
  • 微信小程序入门教程(一)API接口数据记录
    今天测试用小程序调用API接口,发现有些数据打印都是对象,怎么全部打印详细点来小程序代码:httpsearch:function(name,offset,type,cb){wx.request({url:'https://www.tinywan.com/api/wechat/songsSearch',data:{name:name,offset:o......
  • 你真的需要一个微信公众号吗?
    阅读本文大概需要4分钟。      最近看到很多人后台问我各种开通个人公众号的问题,如怎么开通原创功能啊,怎么开通赞赏功能啊,可能读者中也有很大一部分人已经或者将要开通自己的微信公众号,这篇文章姑且我就分享下我个人运营公号的一些宝贵经验,给你们做些参考,相信看完你......
  • j2me开发FAQ整理
    什么是J2ME?答:J2ME是Java 2 Micro Edition的简称,是SUN推出的针对嵌入式消费类电子产品的开发平台,例如手机、PDA和电视机顶盒等。事实上,J2ME是一整套技术和规范的集合。 开发J2ME应用程序使用什么开发环境?答:目前比较主流的开发环境有JBuilder、Eclipse和SUN Mobile等。本站推荐......
  • Jenkins持续集成,接口测试报告发送企业微信
    一、前置条件已经安装Jenkins(361.1)已经安装jdk(jdk17)Jdk和Jenkins版本相互兼容二、启动Jenkins(注意不要关闭dos窗口)切换到Jenkins目录,输入命令:java-jarjenkins.war        2.dos窗口出现“Jenkinsisfullyupandrunning”表示启动成功   ......
  • 知乎微信接口
    微信精选段子http://v.juhe.cn/weixin/query?key=d046cd1f569ed13d951f0258902ef9b2&ps=10知乎最新日报列表http://news-at.zhihu.com/api/4/news/latest知乎详情http://news-at.zhihu.com/api/4//news/{KaTeXparseerror:Expected'EOF',got'}'atposition3:......