云计算百科
云计算领域专业知识百科平台

【微信小程序篇-06】深入理解npm支持和分包加载

深入理解npm支持和分包加载

  • 一,npm支持和分包加载
    • 1,npm支持
      • 1.1,npm包的基本使用
      • 1.2,npm自定义构建
      • 1.3,vant组件库的使用
      • 1.4,vant组件样式覆盖
    • 2,分包加载
      • 2.1,分包加载基本介绍
      • 2.2,分包配置以及打包引用原则
      • 2.3,独立分包
      • 2.4,分包预下载

一,npm支持和分包加载

1,npm支持

1.1,npm包的基本使用

目前小程序已经支持使用npm安装第三方包,因为node_modules 目录中的包不会参与小程序项目的编译、上传和打包,因此在小程序项目中要使用npm包,必须走一遍 构建npm 的过程。首先通过以下命令获取这个package.json文件

npm init y

在这里插入图片描述

随后安装vant的weapp组件库,其代码如下。安装完成之后,会在package.json文件的dependencies中出现安装的@vant/weapp以及对应的版本号

npm i @vant/weapp

在这里插入图片描述

最后再安装完成之后,需要在工具栏点击构建npm,随后会出现这个 miniprogram_npm ,这个包里面存着构建好的npm包

在这里插入图片描述

npm包指的是专门为小程序定制的npm包,简称小程序npm包,因此在使用包之前需要先确认下该包是否支持小程序。比如一个dom包,如果小程序内部不支持的话,那么就不能使用。

1.2,npm自定义构建

在实际开发中,随着项目功能的越来越多、项目越来越复杂,文件目录也变得很繁琐,为了方便进行项目的开发,开发人员通常会对目录结构进行调整,例如将小程序源码放到 miniprogram 目录下,此时就需要开发者在project.config.json中指定node_modules的位置和目标miniprogram_npm 的位置

首先将原始的一些页面,静态资源等全部放在src目录下或者miniprogram目录下

在这里插入图片描述

随后打开终端,执行初始化npm和构建npm的命令

npm init y
npm i @vant/weapp

随后在project.config.json文件中,在setting属性下,配置packNpmManually属性和miniprogramNpmDistDir属性,其具体详情如下,同时还需要配置 miniprogramRoot

{
"compileType":"miniprogram",
"miniprogramRoot": "./miniprogram",
"setting": {
"packNpmManually": true,
"packNpmRelationList":[
{
"packageJsonPath": "./package.json",
"miniprogramNpmDistDir": "./miniprogram"
}
]
}
}

1.3,vant组件库的使用

在学习这个组件之前,可以先去看一下官网上面的组件介绍和基本使用:https://vant-ui.github.io/vant-weapp/#/image ,这里选择一image为例子,讲一下这个组件库的基本使用。

随后需要在index.json文件或者app.json文件中注册这个组件

"usingComponents": {
"van-image": "@vant/weapp/image/index"
}

随后再index.wxml中直接使用官网给的案例即可

<vanimage width="100" height="100" src="https://img.yzcdn.cn/vant/cat.jpeg" />

这个src使用的参数可以如下,当然详情也可以直接参考官网

参数说明类型默认值
src 图片链接 string
fit 图片填充模式 string fill
alt 替代文本 string
width 宽度,默认单位为px string | number
height 高度,默认单位为px string | number
radius 圆角大小,默认单位为px string | number 0
round 是否显示为圆形 boolean false
lazy-load 是否懒加载 boolean false
webp v1.10.11 是否解析 webp 格式 boolean false
show-error 是否展示图片加载失败提示 boolean true
show-loading 是否展示图片加载中提示 boolean true
use-error-slot 是否使用 error 插槽 boolean false
use-loading-slot 是否使用 loading 插槽 boolean false
show-menu-by-longpress 是否开启长按图片显示识别小程序码菜单 boolean false

除了这些基本属性之外,也可以给这些图片绑定一些事件

Events

事件名说明回调参数
bind:click 点击图片时触发 event: Event
bind:load 图片加载完毕时触发 event: Event
bind:error 图片加载失败时触发 event: Event

Slots

名称说明
loading 自定义加载中的提示内容
error 自定义加载失败时的提示内容

外部样式类

类名说明
custom-class 根节点样式类
image-class 图片样式类
loading-class loading 样式类
error-class error 样式类

1.4,vant组件样式覆盖

Vant weapp基于微信小程序的机制,为开发者提供了3中修改组件样式的方法

  • 解除样式隔离:在页面中使用Vant Weapp组件时,可直接在页面的样式文件中覆盖样式
  • 使用外部样式类:普通样式类和外部样式类的优先级是未定义的,需要添加**!important**保证优先级
  • 使用CSS变量:在页面或全局对多个组件的样式做批量修改以进行主题样式的定制

以按钮主键为例,因此需要将vant-button按钮注册到全部路径中

"usingComponents": {
"van-button": "@vant/weapp/button/index"
}

官网提供的按钮有以下几种,type和常规的一样

<vanbutton type="default">默认按钮</vanbutton>
<vanbutton type="primary">主要按钮</vanbutton>
<vanbutton type="info">信息按钮</vanbutton>
<vanbutton type="warning">警告按钮</vanbutton>
<vanbutton type="danger">危险按钮</vanbutton>

在这里插入图片描述

1,解除样式隔离

接下来以主要按钮为例,首先来验证第一种解除样式隔离

<vanbutton type="primary">主要按钮</vanbutton>

设置它的样式如下,如果是在非自定义组件直接在wxss中修改样式,那么可以直接修改成功。

.vanbuttonprimary {
fontsize: 28rpx !important;
backgroundcolor: lightseagreen !important;
border: 1px solid lightseagreen !important
}

在这里插入图片描述

如果是在自定义组件中使用这个样式覆盖,那么需要在自定义组件js文件中将styleIsolation设置为共享模式,那也可以直接修改成功

Component({
options:{
styleIsolation: "shared"
}
})

2,使用外部样式类

依旧是使用这个button按钮,加上这个自定义外部样式类custom-calss,他是一个根节点样式类

<van-button type="primary" custom-class="custom-button">主要按钮</van-button>

在wxss文件中定义这个样式,依旧是所有的样式都要设置权重

.custombutton{
fontsize: 28rpx !important;
backgroundcolor: lightseagreen !important;
border: 1px solid lightseagreen !important
}

3,使用CSS变量

依旧是使用这个button按钮,加上这个class样式my-button

<vanbutton type="primary" class="my-button">主要按钮</vanbutton>

在wxss文件中,需要通过 –color 设置颜色,并且这个van-button–primary也需要加上

.mybutton{
color:lightseagreen !important;
}

.vanbuttonprimary {
fontsize: 28rpx !important;
backgroundcolor: lightseagreen !important;
border: 1px solid lightseagreen !important
}

2,分包加载

2.1,分包加载基本介绍

小程序的代码通常石头许多页面、组件以及资源等组成,随着小程序功能的增加,代码量也会增加,体积过大就会导致用户打开的速度变慢,影响用户的使用体验。分包加载指的就是小程序将不同功能的代码,分别打包成不同的自爆,在构建时打包成不同的分包,用户在使用时按需加载。

每个使用分包的小程序一定会有一个主包,主包默认包含启动页面、Tarbar页面以及所有分包所需的公共资源包;分包是根据开发者的配置进行划分出来的子包

在这里插入图片描述

在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内的某个页面时,微信客户端会把对应的分包下载下来,下载完成之后进行展示。

目前小程序分包大小有以下限制:整个小程序所有分包大小不超过20M、单个分包或者主包大小不能超过20M

2.2,分包配置以及打包引用原则

接下来讲解一下这个分包具体是如何使用的,首先在miniprogram中创建一个文件夹modules,然后再这个文件夹中创建一个childModules文件夹。

随后在app.json文件中,在subPackages属性中添加分包,主包不需要显示设置。root前面不需要./,直接设置目录即可,name指的是别名,pages中设置的是哪些页面会在这个分包中。

"subPackages": [
{
"root":"modules/childModules",
"name": "childModules",
"pages": [
"pages/list/list"
]
}
]

清除缓存重新编译之后,在这childModules文件下,就会将这个对应的内容加载到这个分包里面。

在这里插入图片描述

也可以直接在详情下的代码依赖分析中,查看主包和分包的依赖关系

在这里插入图片描述

打包原则主要如下:

  • tarBar页面必须在主包内
  • 最外层的pages字段,属于主包的包含的页面
  • 按subpackages配置路径进行打包,配置路径的目录将被打包到主包中
  • 分包之间不能相互嵌套,subpackage的根目录不能是另外一个subpackage的子目录

引用原则主要如下:

  • 主包不可以引用分包的资源,但分包可以引用主包的公共资源
  • 分包与分包之间资源无法相互引用,分包异步化时不受此条限制

2.3,独立分包

独立分包指的是独立于主包和其他分包运行的包,独立分包页面进入小程序时,不需要下载主包,因此很大程度上可以提升页面的启动速度。

独立分包的使用也比较简单,在上面设置分包的基础上,在数组在加一个对象,并且设置这个independent为true,那么这个分包就成为了独立分包

{
"root":"modules/cartModules",
"name": "cartModules",
"pages": [
"pages/cart/cart"
],
"independent": true
}

在这里插入图片描述

需要注意的点有如下几点:

  • 独立分包不能依赖主包和其他分包中的资源
  • 主包中的app.wxss对独立分包无效
  • App只能在主包内定义,独立分包中不能定义App,会造成无法预期的行为

2.4,分包预下载

分包预下载指的是访问小程序某个页面时,预先下载其他分包中的代码和资源,当用户需要访问分包中的页面时,已经预先下载的代码和资源则可以直接使用,从而提供用户的体验

小程序的分包下载需要在app.json文件中通过这个preloadRule设置规则,以下分别演示了分包预下载和独立分包预下载,key指的是页面路径,value是一个对象,network指的是任意网络下载还是在wifi情况下下载,packages指的是包别名

"preloadRule": {
"pages/list/list":{
"network": "all",
"packages": ["childModules"]
},
"modules/cartModules/pages/cart/cart":{
"network": "all",
"packages": ["__APP__"]
}
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【微信小程序篇-06】深入理解npm支持和分包加载
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!