当前位置: 首页 > news >正文

小程序:如何合理规划分包使主包不超过2M

背景

做过小程序项目的同学应该都有这样的经历,项目做着做着,突然发现代码包的大小超过了 2M,小程序无法提审,然后痛苦的删文件改代码来减少包大小。

虽然我们也知道小程序给我们提供了分包的功能可以减少主包的大小,但是我们在一开始做项目的时候可能不会去规划然后一股脑放在主包里,当超过后才考虑哪些要放在分包里,这时候再去重构就会比较复杂了,今天我们来讨论一下如何合理的规划分包来避免代码包体积的问题。

思路

我们知道,小程序对代码的包大小有一些规则:

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

那么首先,我们要挑出项目中比较大的文件,以我们项目为例,主要有两个:
1、vant 组件库(300K左右)
2、echarts 图表库(1M左右)

这样可以预见的是目前已经有1.3M的库了,加上一些插件也会打包进主包里,所以我们不能把这些库放到主包里,那么我们要讨论的问题有两个:
1、这些库放在哪里
2、确定放在哪之后,主包和其他分包如何依赖这些库

讨论1:这些库放在哪里

  • 方式一:放在业务的分包
  • 方式二:放在独立的分包

方式一

比如,当某个业务分包要使用 vant 库,就把 vant 库直接放在这个分包里。

  • 优点:
    • 分包独立,不依赖外部
  • 缺点:
    • 1、组件库冗余,可能会造成每个分包里都有一个组件库。
    • 2、需要更新时,各个分包使用的组件库版本可能会不统一(虽然也无伤大雅)
    • 3、主包无法依赖

总结:
对于缺点1很严重,整个小程序所有分包大小不超过 20M,用这种方式会极速膨胀,所以这种方式不适合
2,其实影响不大
3,可以按照方式二建立一个组件库分包,只供主包使用。

方式二

我们新建一个分包,里面只放 vant 库。
当某个业务分包要使用 vant 库,则依赖这个独立的分包(可以使用分包异步化)。

  • 优点:
    • 统一管理
    • 主包和分包都可以依赖
  • 缺点:
    • 1、使用分包异步化可能会有小的延迟。
    • 2、当库需要更新的时候,影响面比较大。

总结:
对于缺点1,无解,但是影响也不大
对于缺点2,无解,影响可大可小吧,现在的也基本上是这么干的

总结

方式一问题太大,不能用
方式二看起来会更好一些,虽然也有一些可能会遇到的问题,但是都不算很严重。

讨论2:主包和其他业务分包如何更优雅的依赖分包中的库

使用alias进行依赖,一些小程序第三方框架都会支持,或者自己用 webpack 配置 alias,使用如下:
json文件

{"usingComponents": {"van-button": "~@/subpackage-components/vant/button/index"},"componentPlaceholder": {"van-button": "view"}
}

js文件

const echarts = await import('@/subpackage-echarts/ec-canvas/echarts.js')
http://www.lryc.cn/news/205704.html

相关文章:

  • 迭代器的封装与反向迭代器
  • PHP项目学习笔记-萤火商城https://www.yiovo.com/doc
  • 我国有多少个港口?
  • uniapp实现登录组件之外区域置灰并引导登录
  • 抄表系统是如何抄到电表水表的数据的?
  • Qt之自定义事件QEvent
  • 项目管理week5——交个作业
  • 5.5G移动通信技术
  • chrony时间服务
  • 音乐制作软件 Studio One 6 mac中文版软件特点
  • SpringBoot整合redis集群和redis单节点
  • 【ARM Coresight 系列文章19.1 -- Cortex-A720 PMU 详细介绍】
  • FoneDog iOS Unlocker(ios解锁工具) 适用macos电脑
  • 雅可比矩阵和雅可比坐标
  • macOS鼠标管理操作增强BetterMouse简体中文
  • 塔式服务器介绍
  • 上海市道路数据,有63550条数据(shp格式和xlsx格式)
  • 计算机网络_03_tcp/ip四层模型
  • [SQL开发笔记]IN操作符: 在WHERE子句中规定多个值
  • Java基础(第一期):IDEA的下载和安装(步骤图) 项目结构的介绍 项目、模块、类的创建。第一个代码的实现
  • 0基础学习PyFlink——使用PyFlink的SQL进行字数统计
  • 【Java系列】ArrayList
  • sqlalchemy 使用
  • Python深度学习实战-基于class类搭建BP神经网络实现分类任务(附源码和实现效果)
  • GIS 数据结构整理:网格索引
  • 【打靶】vulhub打靶系列(一)—小白视野的渗透测试
  • kafka3.X集群安装(不使用zookeeper)
  • 2023 年 的 DBA 有哪些变化?
  • vs2022 使用git同步报错以及解决每次推送要输入密码问题
  • 有哪些适用于 Windows 的PDF 阅读器?免费 PDF 阅读器清单