微信小程序基础学习(5):使用 npm包、全局数据共享、分包

news2024/11/24 3:40:39

1. 使用 npm包

1.1 小程序对 npm 的支持与限制

目前,小程序中已经支持使用 npm 安装第三方包,从而来提高小程序的开发效率。但是,在小程序中使用 npm 包有如下 3 个限制:

  1. 不支持依赖于 Node.js 内置库的包。
  2. 不支持依赖于浏览器内置对象的包 。
  3. 不支持依赖于 C++ 插件的包。

总结:虽然 npm 上的包有千千万,但是能供小程序使用的包却“为数不多”。

1.2 Vant Weapp

(1)什么是 Vant Weapp

Vant Weapp 是有赞前端团队开源的一套小程序 UI 组件库,助力开发者快速搭建小程序应用。它所使用的是 MIT 开源许可协议,对商业使用比较友好。

官方文档地址 https://youzan.github.io/vant-weapp

扫描下方的小程序二维码,体验组件库示例:
在这里插入图片描述

(2)安装 Vant 组件库

在小程序项目中,安装 Vant 组件库主要分为如下 3 步:

① 通过 npm 安装(建议指定版本为@1.3.3)
② 构建 npm 包
③ 修改 app.json

详细的操作步骤,可以参考 Vant 官方提供的快速上手教程:
https://youzan.github.io/vant-weapp/#/quickstart#an-zhuang

(3)使用 Vant 组件

安装完 Vant 组件库之后,可以在 app.jsonusingComponents 节点中引入需要的组件,即可在 wxml 中直接使用组件。示例代码如下:
在这里插入图片描述
(4)定制全局主题样式

Vant Weapp 使用 CSS 变量来实现定制主题。 关于 CSS 变量的基本用法,请参考 MDN 文档:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties

(5)定制全局主题样式

app.wxss 中,写入 CSS 变量,即可对全局生效:

在这里插入图片描述
所有可用的颜色变量,请参考 Vant 官方提供的配置文件:
https://github.com/youzan/vant-weapp/blob/dev/packages/common/style/var.less

1.3 API Promise化

(1)基于回调函数的异步 API 的缺点

默认情况下,小程序官方提供的异步 API 都是基于回调函数实现的,例如,网络请求的 API 需要按照如下的方式调用:

在这里插入图片描述
缺点: 容易造成回调地狱的问题,代码的可读性、维护性差

(2)什么是 API Promise 化

API Promise化,指的是通过额外的配置,将官方提供的、基于回调函数的异步 API,升级改造为基于 Promise 的异步 API,从而提高代码的可读性、维护性,避免回调地狱的问题。

(3)实现 API Promise 化

在小程序中,实现 API Promise 化主要依赖于 miniprogram-api-promise 这个第三方的 npm 包。它的安装和使用步骤如下:

在这里插入图片描述
在这里插入图片描述
(4)调用 Promise 化之后的异步 API
在这里插入图片描述

2. 全局数据共享

2.1 全局数据共享

(1)什么是全局数据共享

全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题。

开发中常用的全局数据共享方案有:Vuex、Redux、MobX 等。
在这里插入图片描述
(2)小程序中的全局数据共享方案

在小程序中,可使用 mobx-miniprogram 配合 mobx-miniprogram-bindings 实现全局数据共享。其中:

  • mobx-miniprogram 用来创建 Store 实例对象
  • mobx-miniprogram-bindings 用来把 Store 中的共享数据或方法,绑定到组件或页面中使用

2.2 MobX

(1)安装 MobX 相关的包

在项目中运行如下的命令,安装 MobX 相关的包:

在这里插入图片描述
注意:MobX 相关的包安装完毕之后,记得删除 miniprogram_npm 目录后,重新构建 npm。

(2)创建 MobX 的 Store 实例

在这里插入图片描述
(3)将 Store 中的成员绑定到页面中

在这里插入图片描述
(4)在页面上使用 Store 中的成员

在这里插入图片描述
(5)将 Store 中的成员绑定到组件中

在这里插入图片描述
(6)在组件中使用 Store 中的成员

在这里插入图片描述

3. 分包

3.1 基础概念

(1)什么是分包

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

(2)分包的好处

对小程序进行分包的好处主要有以下两点:

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

(3)分包前项目的构成

分包前,小程序项目中所有的页面和资源都被打包到了一起,导致整个项目体积过大,影响小程序首次启动的下载时间

在这里插入图片描述

(4)分包后项目的构成

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

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

在这里插入图片描述

(5)分包的加载规则

① 在小程序启动时,默认会下载主包启动主包内页面

  • tabBar 页面需要放到主包中。

② 当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后再进行展示。

  • 非 tabBar 页面可以按照功能的不同,划分为不同的分包之后,进行按需下载。

(6)分包的体积限制

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

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

3.2 使用分包

(1)配置方法

在这里插入图片描述

(2)打包原则

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

(3)引用原则

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

3.3 独立分包

(1)什么是独立分包

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

在这里插入图片描述

(2)独立分包和普通分包的区别

最主要的区别:是否依赖于主包才能运行

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

(3)独立分包的应用场景

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

  • 当小程序从普通的分包页面启动时,需要首先下载主包。
  • 而独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度

注意: 一个小程序中可以有多个独立分包。

(4)独立分包的配置方法

在这里插入图片描述
(5)引用原则

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

  1. 主包无法引用独立分包内的私有资源。
  2. 独立分包之间,不能相互引用私有资源。
  3. 独立分包和普通分包之间,不能相互引用私有资源。
  4. 特别注意:独立分包中不能引用主包内的公共资源。

3.4 分包预下载

(1)什么是分包预下载

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

(2)配置分包的预下载

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

在这里插入图片描述
(3)分包预下载的限制

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

在这里插入图片描述

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

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

相关文章

查看进程信息(ps、top) + 操作后台进程(jobs、bg、fg)

目录 1、查看进程信息 (1) 查看进程快照 —— ps (2) 查看进程的动态信息 —— top (3) 查看进程的详细信息 —— /proc 2、操作后台进程 (1) 将进程转为后台 (2) 将后台进程转为前台运行 fg (3) 查看后台进程 jobs 1、查看进程信息 (1) 查看进程快照 —— ps 所谓…

Word控件Spire.Doc 【图像形状】教程(3) :在 C#/VB.NET 中的指定位置插入图像

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

【无标题】接口测试遇到的典型bug纪录

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Java#22(内部类)

目录 一.内部类 1.什么是内部类? 2.什么时候用? 3.特点 二.成员内部类,静态内部类,局部内部类(稍微了解即可) 1.获取成员内部类对象的两种方式? 2.外部类成员变量和内部类成员变量重名时,在内部类如何访问? 2.静态内部类 3.局部内部类 三. 匿名内部类…

verdi基础操作

看波形: 1.代码里选中,再按鼠标中键拖进去 2.选中,ctrlw 3.用get signal 在波形框中,按照鼠标左键再左右移动,可以放大这一部分的波形,还有下面的功能键可以用 删除波形: 按delete或者cut掉…

如何压缩图片200k以下?

“图片过大无法上传”,“因您上传的图片大小超过限制”这样的提示大家都有遇到过吧?这就是告诉我们现在的图片需要压缩一下才能继续使用了,否则我们就无法使用当前照片了。 那有很多平台,特别是上传一些证件照的时候,要…

北京筑龙获爱分析采购数字化报告大满贯, 领跑供应链协同市场

2022年11月21日,国内领先的数字化市场研究咨询机构爱分析发布了《2022爱分析采购数字化厂商全景报告》(以下简称《报告》)。北京筑龙凭借专业的数字化技术、采购供应链数字化经验以及在政企数字化领域积累的丰富项目实践经验,成功…

微信小程序商城搭建步骤_我们来说说微信小程序商城开发的作用

比如下面我推荐的这个就有很多不错的各行业商城小程序模板,新手也能轻松搭建的那种!(见我主页) 但要想把商城小程序运营到能稳定赚钱,就需要商家结合自身的实际,去指定合适的推广策略。下面就讲讲如何实现线…

第4章 配置集成第3方log4net日志中间件

在上一章中虽然已经把第3方log4net日志中间件定义到了当前程序中,但是并没有把第3方log4net日志中间件的功能配置并集到当前程序中,即当前程序还不能通过第3方log4net日志中间件把日志数据信息持久化到指定的文件或表中,本章即将实现当前程序…

SpringBoot2.X与redis Lettuce集成踩坑

起因 最近项目上发现一个问题,redis cluster集群有一台机崩了之后,后台服务的redis会一直报错,无法连接到redis集群。通过命令查看redis集群,发现redis cluster集群是正常的,备用的slave机器已经升级为master。 于是初…

c<7>存储

目录 1&#xff0c;局部变量 1,auto 2,static 2&#xff0c;全局变量的储存类型 3,register 4,extern 作用&#xff1a; 1&#xff0c;局部变量 #include <stdio.h> int main() {int fAuto(int a);int fStatic(int a); //函数声明int a 1, i; //自动局部变…

去了家新公司,技术总监不让用 IntelliJ IDEA想离职了

最近有个小伙伴微信和我说&#xff0c;新去的一家公司&#xff0c;技术团队全部规定要用的 Eclipse 开发&#xff0c;技术总监不让用 IntelliJ IDEA&#xff0c;付费也不行&#xff0c;说想离职了&#xff0c;问我该怎么办。 首先听到这件事情的时候&#xff0c;我表示十分理解…

关于消息队列的那些事

目录为什么需要消息队列1.异步处理2.服务解耦3.流量控制消息队列1.两种模型2.基本原理3.常见问题本篇文章参考文献如下&#xff1a; 面试题&#xff1a;如何保证消息不丢失&#xff1f;处理重复消息&#xff1f;消息有序性&#xff1f;消息堆积处理&#xff1f; (qq.com) 超详…

【数据通信】具有路由 WSN 模拟器的随机方式移动(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Yolov5的类激活图

在本教程中&#xff0c;我们将了解如何将 EigenCAM&#xff08;无梯度方法之一&#xff09;用于 YOLO5。 这是https://github.com/jacobgil/pytorch-grad-cam/blob/master/tutorials/Class Activation Maps for Object Detection With Faster RCNN.ipynb 中 适用于 YOLO5的教程…

堆排序(算法实现)

文章目录堆排序-算法实现1. 向上调整和向下调整比较2. 堆排序1. 升序2. 降序堆排序-算法实现 前面介绍了堆的基本功能实现(https://blog.csdn.net/m0_46343224/article/details/127986662)&#xff0c;了解了堆&#xff0c;这里用堆实现排序 1. 向上调整和向下调整比较 思考&a…

1. pip和conda的区别

Pip 或者 conda的时候经常被混合使用&#xff0c;这两者也通常被认为是几乎相同的&#xff0c;尽管他们的很多功能是重叠的&#xff0c;但它们的设计和使用目的不同。所以这次参考官方的解释&#xff0c;来进行如下总结和归纳&#xff1a;附上官方解释&#xff1a;conda和pip的…

关于Python的局部变量和全局变量使用介绍

局部变量&#xff1a;在函数中定义的变量&#xff0c;作用域是当前函数&#xff0c;只对当前函数起作用。 全局变量&#xff1a;在代码开头定义的变量&#xff0c;作用域是整段代码&#xff0c;对整段代码起作用。 先看下面的实例&#xff0c; 最后给结论。 name ‘PythonTa…

月薪9K和年薪30W的职位,有什么区别?

【浙江杭州】加速科技 测试开发工程师&#xff08;15-30W/年&#xff09; 岗位职责&#xff1a; 1、根据产品的需求编写测试用例&#xff0c;搭建软硬件联合测试环境&#xff1b; 2、对研发的模块/系统进行测试并输出测试报告&#xff1b; 3、整理并定期提交buglist&#…

我的PFC岩土颗粒流离散元分析攻略(附赠学习资料)

作者 | Lobby &#xff0c;仿真秀专栏作者 导读&#xff1a;lobby曾是国内“双一流“”院校本硕连读土木专业的大学生&#xff0c;现在从事土木相关的研发工作。目前在仿真秀官网发布过数十篇付费文章&#xff0c;含金量颇高&#xff0c;受到用户的好评。本期我们将带来lobby老…