安装wgt包
wgt,是 uni-app x 蒸汽模式的前端资源包。包括uvue、脚本、静态资源。不包括原生插件。
通过在线下载和安装wgt,可以实现相同appid应用的资源替换。
wgt热更新后,运行性能不变。也就是动态化方案的渲染性能超过了原生。详见评测
uni-app 的 wgt 是zip格式。uni-app x 的 wgt 是压缩率和解压速度更优秀的zstd格式。可以大幅降低热更新带来的cdn成本。
在HBuilder 5.31+ 中对 uni-app x 项目点发行,可看到生成wgt的菜单。由于条件编译的存在,uni-app x 不同平台的 wgt 包是不同的。
推荐使用 uni升级中心 进行 wgt 发布与更新,它拥有众多优势:
| Web | 微信小程序 | 支付宝小程序 | Android(VDOM) | Android(Vapor) | iOS(VDOM) | iOS(Vapor) | HarmonyOS |
|---|---|---|---|---|---|---|---|
| x | x | x | x | 5.31 | x | 5.31 | x |
| 名称 | 类型 | 必填 | 兼容性 | 描述 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| options | InstallWgtOptions | 是 | 参数 | |||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| 名称 | 类型 | 必备 | 兼容性 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| errCode | number | 是 | 安装应用错误码 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| errSubject | string | 是 | 统一错误主题(模块)名称 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| data | any | 否 | 错误信息中包含的数据 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cause | Error | 否 | 源错误信息,可以包含多个错误,详见SourceError | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| errMsg | string | 是 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
示例为hello uni-app x alpha分支,与最新HBuilderX Alpha版同步。与最新正式版同步的master分支示例另见
该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验
<template>
<view style="margin:12px">
<page-head title="安装应用资源"></page-head>
<page-intro content="本页演示 uni.installWgt 安装应用资源的错误示例:点击更新资源按钮后因为传递资源路径不存在而报错。仅蒸汽模式支持"></page-intro>
<!-- #ifdef VUE3-VAPOR && (APP-ANDROID || APP-IOS) -->
<button class="button" type="primary" @click="update">升级wgt</button>
<!-- #endif -->
</view>
</template>
<script setup lang="ts">
// #ifdef VUE3-VAPOR && (APP-ANDROID || APP-IOS)
function update() {
uni.installWgt({
filePath: "/static/__UNI__HelloUniAppX.wgt",
success: (res) => {
console.log(res);
},
fail: (error) => {
console.log(error);
uni.showToast({
title: error.errMsg,
icon: 'error'
})
},
complete: (res) => {
console.log(res);
}
})
}
// #endif
</script>
<style>
.button {
margin-bottom: 4px;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>
应用商店可以接受热更新用于修复紧急bug、运营活动调整、部分功能升级。几乎所有大厂App也都有动态化方案。
但应用商店也有底限:
额外建议:当开发者发布了热更新后,也应该及时提交应用商店,避免应用刚下载就立即弹升级提示。可以使用uni多商店上传,来批量提交应用商店。
通过wgt包在线升级应用操作流程:
uni.installWgt 安装wgt包,在安装成功的回调中调用 getApp().restart 重启应用使更新生效推荐方案: 建议直接使用 升级中心 进行 wgt 发布与更新,可大幅降低开发和测试成本。
wgt热更新,只能更新前端资源,不能热更新原生底座的原生模块,不能热更新manifest相关内容。需注意前端代码与原生底座的匹配性。
举例,初始的原生包中,未包含map地图模块。如果基于该原生包安装新wgt包,新wgt包中的代码引用了map组件,那么该这部分代码在运行时会报错。
打包时,HBuilder控制台会列出当前打包了哪些模块,默认是根据当前代码使用的模块来摇树决定的。如果要额外添加某些模块,需要在manifest中手动配置,配置后需重新打包才能生效。详见
开发者可以提前预置一些暂时未使用的模块。也可以在遇到需要更新原生模块的时候,请求用户升级完整包(可以在热更新的时候,也可以在报缺少模块错误的时候)。
uni.installWgt 成功后会直接替换当前运行资源。为了避免出现资源不同步,必须在安装成功的回调中调用 getApp().restart() 重启应用或手动关闭重新打开应用。uni.installWgt 成功后不会直接替换当前应用资源,新资源仅在重启应用或主动调用 getApp().restart() 后生效,不会影响当前正在运行的版本。| 名称 | 类型 | 必备 | 描述 |
|---|---|---|---|
| errMsg | string | 是 | 错误信息 |