【uniapp&微信小程序】小程序分包加载机制与配置

前言

        因为小程序有体积和资源加载限制,各家小程序平台提供了分包方式,优化小程序的下载和启动速度。所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据pages.json的配置进行划分。在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,会把对应分包自动下载下来,下载完成后再进行展示。

分包配置

        目前微信小程序每个分包的大小是2M,总体积一共不能超过20M,要实现分包,小程序分包目录结构需如下:

┌─pages
│  ├─index
│  │  └─index.vue
│  └─login
│     └─login.vue
├─pagesA
│  ├─static
│  └─pages
│      ├─pagesA1
│      │  └─pagesA1.vue
│      └─pagesA2
│         └─pagesA2.vue
├─pagesB
│  ├─static
│  └─pages
│      ├─pagesB1
│      │  └─pagesB1.vue
│      └─pagesB2
│         └─pagesB2.vue
├─static
├─main.js
├─App.vue
├─manifest.json
└─pages.json

 以上是项目文件位置,接下来需配置pages.json文件,通过subpackages创建分包:

	"subPackages": [ //通过subpackages节点创建分包结构
		{
		  "root": "pagesA", //分包的根目录
          "name": "pA", //可设置分包别名
		  "pages": [ //当前分包下的所有页面的相对存放路径
			{
			  "path": "pages/pagesA1/pagesA1",
			  "style": {
				"navigationBarTitleText": "分包pagesA下pagesA1页面"
			  }
			},
			{
			  "path": "pages/pagesA2/pagesA2",
			  "style": {
				"navigationBarTitleText": "分包pagesA下pagesA2页面",
			  }
			}]
		},
		{
		"root": "pagesB",
		"pages": [
			{
			"path": "pages/pagesB1/pagesB1",
			"style": {
				"navigationBarTitleText": "分包pagesB下pagesB1页面"
			}
			},
			{
			"path": "pages/pagesB2/pagesB2",
			"style": {
				"navigationBarTitleText": "分包pagesB下pagesB2页面"
			}
			}]
		}
	],

subPackages 节点接收一个数组,数组每一项都是应用的子包,其属性值如下:

属性类型是否必填描述
rootString子包的根目录
pagesArray子包由哪些页面组成,参数同 pages

配置完成后打开微信开发者工具,右上角详情按钮打开查看基本信息:

 这里可以看到我们成功创建了pagesA与pagesB分包。

分包的引用原则

需要注意,一旦创建了分包,那么主包无法引用分包内的私有资源(如img等),分包之间也不能互相引用私有资源,但分包可以引用主包资源。

 

分包预下载

分包预下载指的是在进入某个指定页面,下载需要的分包资源,这一功能可pages.json文件,通过preloadRule节点定义分包预下载的规则,preloadRule中,key是页面路径,value是进入该页面的预下载配置,其配置项如下:

字段       类型必填默认值说明
packages     StringArray需要预下载的包名,可填分包root或name,_APP_表示主包。
networkString        wifi在指定网络下预下载,可选值为:all(不限网络)、wifi(仅wifi下预下载)
"preloadRule": {
		"pagesA/list/list": { //触发分包预下载的页面路径
			"network": "all", //表示在指定的网络模式下进行预下载
			"packages": ["__APP__"] //表示进入页面之后,预下载哪些分包
		},
		"pagesB/detail/detail": {
			"network": "all",
			"packages": ["pagesA"]
		}
	}

总结

        到这里关于分包配置就完成啦,解决了以往所有页面和资源都打包在一起,导致项目体积过大所造成的性能问题,并且在团队开发时可以更好的解耦协作 


推荐阅读

[uniapp&微信小程序]vue3+ts+vite+pinia+eslint+prettier+husky项目搭建

快速搞懂Pinia及数据持久化存储(详细教程)

多终端响应式开发(Bootstrap栅格系统原理及实现)

Print.js实现打印pdf,HTML,图片(可设置样式可分页)

UniApp配置微信小程序全局分享,需要在uni-app项目的`config.js`文件中设置相关的接口权限,并在需要分享的页面中调用微信的小程序API。以下是基本步骤: 1. **配置**: - 在`config.js`文件中,找到`uni.login`的对象,添加`scope.userInfo`权限,这将允许获取用户的头像和昵称用于分享: ```javascript login: { scope: 'scope.userInfo', success: ..., fail: ... }, ``` 2. **引入依赖**: - 需要在需要使用的页面导入`uni-share-api`模块: ```javascript import { shareToWechatTimeline } from '@dcloudio/uni-app-plus/share' ``` 3. **创建分享内容**: - 在页面的分享功能触发时,比如点击按钮,编写分享逻辑: ```javascript async function share() { const res = await shareToWechatTimeline({ title: '来自您的应用', // 分享标题 desc: '这是我的应用分享的内容', // 分享描述 path: '/pages/index/index', // 小程序内部路径 imageUrl: 'path/to/image', // 分享图片的URL }) console.log(res) } ``` 4. **监听用户授权**: - 用户授权登录后,可以通过`uni.getSetting`检查是否已获取到用户信息,以便后续使用: ```javascript uni.getSetting({ success: (res) => { if (res.authSetting['scope.userInfo']) { // 已经授权,可以使用分享功能 } else { uni.authorize({ authorization: 'scope.userInfo' }) // 弹窗请求授权 } } }); ``` 记得替换上述代码中的`title`、`desc`、`imageUrl`等字段为你实际想要分享的内容。在实际项目中,你还可以自定义更多的分享选项,如音频、视频等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琢鸣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值