uni-app 热更新 plus.runtime.install后打开页面样式错乱
uni-app 热更新 plus.runtime.install后打开页面样式错乱
操作步骤:
- 按我上方说的步骤复现
预期结果:
- 按我上方说的步骤复现
实际结果:
- 按我上方说的步骤复现
bug描述:
今天使用了热更新后,完全颠覆了我的认知,直接导致我后面不敢使用热更新。请相关技术人员排查问题。
现在比如App使用版本1.0.0(app热更新代码见附件),先打了热更新包1.0.1.wgt
我使用plus.runtime.install
安装的wgt包,安装成功后不调用restart
,下次重启App生效是符合我的需求的。
问题:假设在App1.0.0有个页面叫 pages/detail/detail
,打的1.0.1.wgt热更新包对 pages/detail/detail
页面UI做了修改(比如加了按钮或者搜索框)。修改完成后发布wgt热更新包,plus.runtime.install
的success
回调了,没有调用restart
。
重点来了,重点来了,重点来了,重点来了,重点来了
热更新成功后,用户不重启App,直接打开detail页面,UI全乱了。但是能看到一些文案,这个文案却是1.0.1wgt包里才加的。用户重启App后,是最新的1.0.1,是正常的,没有任何问题。
我的理解:install后不调用restart
方法,当前app使用的还是上一次的资源包,不会有热更新包的任何信息,但结果却不是,请相关技术人员排查问题。
HBuilder X 版本 4.36
在处理uni-app热更新(HBU, Hot Bundle Update)后页面样式错乱的问题时,通常这是由于新旧资源缓存冲突、样式文件未正确更新或者资源加载顺序问题导致的。下面提供一个通过代码检查和调整资源加载顺序的示例,来帮助你定位和解决该问题。
步骤一:确保热更新资源正确加载
首先,确保在调用plus.runtime.install
进行热更新后,应用正确加载了新的资源。你可以在安装成功后,通过日志输出或调试工具检查是否加载了预期的新版本资源。
plus.runtime.getProperty(plus.runtime.APPID, (info) => {
const newVersion = 'your_new_version_code'; // 替换为你的新版本号
if (info.version !== newVersion) {
plus.downloader.createDownload(yourUpdateUrl, {}, (d, status) => {
if (status === 200) {
const wgtPath = '_www/' + d.filename;
plus.runtime.install(wgtPath, {}, (e) => {
if (!e) {
console.log('热更新成功,即将重启应用');
plus.runtime.restart();
} else {
console.error('热更新失败:', e.message);
}
});
} else {
console.error('下载更新包失败:', status);
}
}).start();
} else {
console.log('已是最新版本');
}
});
步骤二:清理缓存
热更新后,尝试清理应用缓存,尤其是样式文件相关的缓存,以避免缓存导致的样式错乱。虽然uni-app本身管理大部分缓存,但在某些情况下手动清理可能有助于解决问题。
// 清理缓存示例(注意:此方法可能需要根据实际项目调整)
function clearCache() {
const caches = window.caches;
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cacheName) => {
if (cacheName.startsWith('your-cache-prefix')) { // 仅清理特定前缀的缓存
return caches.delete(cacheName);
}
})
);
}).then(() => {
console.log('缓存清理完成');
}).catch((error) => {
console.error('清理缓存失败:', error);
});
}
步骤三:检查样式文件加载顺序
确保在热更新后,样式文件的加载顺序没有发生变化。有时候,由于资源路径或打包配置的问题,样式文件的加载顺序可能会被打乱,导致样式覆盖问题。
<!-- 确保样式文件按照预期顺序加载 -->
<link rel="stylesheet" href="/static/css/base.css">
<link rel="stylesheet" href="/static/css/theme.css">
<!-- 其他样式文件 -->
通过上述步骤,你应该能够定位并解决uni-app热更新后页面样式错乱的问题。如果问题依旧存在,建议详细检查热更新包的构建配置和资源路径,确保一切符合预期。