UniApp2024-10-31•8 min
UniApp 分包 uni-id-pages 实践
解决微信小程序 vendor.js 过大问题,单独分包 uni-id-pages 的完整教程
UniApp 分包 uni-id-pages 实践
#目录
#介绍
使用uniapp编译微信小程序的时候,经常会出现vendor.js过大的情况,这时候就需要考虑分包。除了其他第三方插件,uniapp的插件也占用主包很大的空间。
uniapp项目中自己的插件放在uni_modules目录下,但是如果将整个uni_modules作为分包经常会出现问题,因为很多插件在主包中要用到。这里以单独将uni-id-pages分包为例。
#目录结构

如图所示,首先将uni_modules中的uni-id-pages包拿出来,放到新建的一个用来存放分包的目录,我这里是sub-uni。
然后,在pages.json中更新分包声明和页面路径:
{
"subPackages": [
{
"root": "sub-uni/uni-id-pages",
"pages": [
{
"path": "pages/register/register",
"style": {
"navigationBarTitleText": "注册"
}
},
{
"path": "pages/login/login-withoutpwd",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/login/login-withpwd",
"style": {
"navigationBarTitleText": "账号密码登录"
}
},
{
"path": "pages/login/login-smscode",
"style": {
"navigationBarTitleText": "手机验证码登录"
}
},
{
"path": "pages/register/register-by-email",
"style": {
"navigationBarTitleText": "邮箱验证码注册"
}
},
{
"path": "pages/retrieve/retrieve",
"style": {
"navigationBarTitleText": "重置密码"
}
},
{
"path": "pages/retrieve/retrieve-by-email",
"style": {
"navigationBarTitleText": "通过邮箱重置密码"
}
},
{
"path": "pages/common/webview/webview",
"style": {
"enablePullDownRefresh": false,
"navigationBarTitleText": ""
}
},
{
"path": "pages/admin/register",
"style": {
"enablePullDownRefresh": false,
"navigationBarTitleText": "注册管理员账号"
}
}
]
}
],
"preloadRule": {
"pages/index/index": {
"packages": ["sub-uni/uni-id-pages"]
}
}
}#云服务空间与公共模块处理
uni-id-pages下的插件是依赖uniCloud云服务空间的,所以要更新云函数和云对象的依赖关系。
将分包后的uni-id-pages目录下的uniCloud目录中的cloudfunctions和database的内容分别放到根目录下的uniCloud对应的目录下:

#关联公共模块
右键点击cloudfunctions下的uni-id-co,选择管理公共模块或扩展库依赖

将项目中依赖的模块勾选-确定

#云函数和表上传云服务空间


此时就处理好了uni-id-pages的依赖,接下来就是修改官方的uni-id-pages的初始化流程
#动态导入uniIdPageInit
App.vue中初始化改为动态导入,因为微信小程序中分包在一开始并没有加载,所以需要要确保分包下载完成后再执行初始化,否则就会报错找不到该文件。
