uni-app 热更新后界面出现错乱 undefined 等等

uni-app 热更新后界面出现错乱 undefined 等等

操作步骤:

  • APP 热更新后 用户首次打开

预期结果:

  • 界面正常显示

实际结果:

  • 界面出现没有样式和布局,只有很多undefined

bug描述:

  1. app离线打包使用了热更新
  2. app打开后检查更新=>有更新内容=>下载wgt=>安装wgt=>重启进入app=>更新完成
  3. 上述流程今年开始一直没有问题,都是正常更新的 (这个现象在去年的时候也遇到过)
  4. 2022年5月7月的这次热更新 很多用户更新后的界面出现了undefined等字段 并且样式错乱,如图
  5. 目前还没有思路解决这个问题,希望官方能给一些思路或办法
  6. 在论坛中找到有个帖子也有这个问题,说bug已确认,但是还没解决,地址: https://ask.dcloud.net.cn/question/123663
  7. 很着急,刚才22点28还有用户反应这个问题

Image


更多关于uni-app 热更新后界面出现错乱 undefined 等等的实战教程也可以访问 https://www.itying.com/category-93-b0.html

33 回复

临时解决方案来了:手动修改 wgt 包内__uniappview.html文件直接引用的js文件的文件名。 步骤:

解压缩 wgt 包。
修改 __uniappview.html 文件内涉及的 js 文件名(需要修改文件名称,不可用加参数的方式)。
重新压缩全部解压出来文件为 zip(不要带最外层的文件夹压缩)。
修改 zip 格式为 wgt。

更多关于uni-app 热更新后界面出现错乱 undefined 等等的实战教程也可以访问 https://www.itying.com/category-93-b0.html


已经使用这种方式更新了两个版本了 目前没有遇到问题

apk文件怎么修改,老是提示解析包错误。。

为了避免手工修改出现错误,我做了个角本

1.全局安装修复工具

2.在打包好的wgt文件夹所在目录执行 wgt fix 命令

3.会自动生成_fix.wgt的文件,发布时发布_fix.wgt文件就行

回复 愿随风丶飘雪: 大佬,提示无法将“wgt”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。咋办

回复 2***@qq.com: 检查一下nodejs的环境变量是否配置正确

回复 愿随风丶飘雪: PS F:\Project\app> node -v v16.14.0 PS F:\Project\app> npm -v 8.3.1 命令查看环境应该是没问题的吧。还是不行呢 PS F:\Project\app> wgt fix wgt : 无法将“wgt”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。 所在位置 行:1 字符: 1

回复 2***@qq.com: 加群 870279915

回复 愿随风丶飘雪: 大佬现在这个方法可以彻底解决吗

回复 1***@qq.com: 目前我们用这种方式了快一年了 没有遇到问题

回复 1***@qq.com: 另外 据说官方已经把这个问题解决了,不过我没有时间测试

回复 愿随风丶飘雪: 好的 谢谢大佬

回复 1***@qq.com: 解决了?

用的这个临时方案还是不行,还是有用户页面出现undefined

回复 ly6633: 我这边也是样式全丢了,偶发现象,当时测试过是行的

请问现在这个问题解决没有呢,已经使用这个方式很久了,不能一直这样下去吧

整包升级,然后再热更新,可能旧基座不适配新的

旧基座不适配新的hbuildderX打包的wgt?

发现了一个规律,是这次首页界面进行了修改,布局发生了变化 之前一直没问题是我没有修改过首页的布局

有没有备用的升级通道 如果有的话 建议做一个整包的更新 强更 你要是没有,记得下一回做一个强更的功能 避免版本出现问题的时候使用

强更会损失用户的,不想强迫用户

我的客户也遇到了这个问题,api重启也是undefided,只能手动关掉再打开才正常

复现使用的材料发我,或者联系方式 QQ 私信发我一下。

@小七ing 您那边能复现吗,给官方发个可以复现的包

回复 DCloud_UNI_GSQ: 偶尔复现咋发,我直接不用热更新了,整包更新

回复 愿随风丶飘雪: 偶尔复现咋发,我直接不用热更新了,整包更新

回复 小七ing: 哎,这么好用的功能被放弃了

确实 我是api重启的

回复 愿随风丶飘雪: 要手动重启才行,api重启不行

在 uni-app 中进行热更新后,如果界面出现错乱、undefined 等问题,可能是由于以下原因导致的。以下是一些常见的排查和解决方法:


1. 热更新文件未正确加载或缓存问题

  • 原因:热更新后,部分文件可能未正确加载,或者浏览器缓存了旧的文件。
  • 解决方法
    • 清除浏览器缓存或 App 的缓存。
    • 确保热更新的文件路径正确,且文件已成功下载。
    • manifest.json 中配置 "app-plus": { "cache": false },禁用缓存。

2. 热更新文件与本地代码不兼容

  • 原因:热更新的代码与本地代码存在不兼容,例如数据结构变化、接口变化等。
  • 解决方法
    • 确保热更新的代码与本地代码兼容。
    • 在热更新前,测试更新后的代码是否正常运行。
    • 如果涉及接口变化,确保后端接口也同步更新。

3. 热更新后未正确初始化

  • 原因:热更新后,部分全局变量或状态未正确初始化。
  • 解决方法
    • App.vueonLaunchonShow 生命周期中,检查并初始化全局变量。
    • 确保热更新后,页面或组件的生命周期函数正确执行。

4. 热更新文件损坏

  • 原因:热更新的文件在下载或解压过程中损坏。
  • 解决方法
    • 重新打包并上传热更新文件。
    • 在热更新逻辑中,增加文件完整性校验(如 MD5 校验)。

5. 热更新逻辑问题

  • 原因:热更新的逻辑代码存在问题,例如未正确处理更新后的文件路径。
  • 解决方法
    • 检查热更新逻辑,确保文件路径和加载顺序正确。
    • 使用 uni.downloadFileuni.saveFile 下载并保存文件,确保文件路径正确。

6. 页面或组件未正确加载

  • 原因:热更新后,页面或组件的路径或名称发生变化,导致加载失败。
  • 解决方法
    • 检查页面或组件的路径是否正确。
    • 确保 pages.json 中的配置与热更新后的文件一致。

7. 热更新后未重启应用

  • 原因:部分热更新需要重启应用才能生效。
  • 解决方法
    • 在热更新完成后,提示用户重启应用。
    • 使用 uni.reLaunchuni.navigateTo 重新加载页面。

8. 调试和日志

  • 解决方法
    • 在热更新逻辑中增加日志,记录文件下载、解压和加载的过程。
    • 使用 console.loguni.showToast 输出关键信息,方便排查问题。

9. 检查 uni-app 版本

  • 原因:uni-app 的某些版本可能存在热更新的兼容性问题。
  • 解决方法
    • 确保 uni-app 的版本是最新的稳定版。
    • 如果问题依然存在,尝试降级或升级 uni-app 版本。

10. 热更新后重新渲染页面

  • 解决方法
    • 在热更新完成后,手动调用 this.$forceUpdate() 强制重新渲染页面。
    • 使用 uni.reLaunchuni.navigateTo 重新加载页面。

示例代码:热更新后重启应用

// 热更新完成后提示用户重启
uni.showModal({
  title: '提示',
  content: '更新已完成,需要重启应用',
  success: (res) => {
    if (res.confirm) {
      uni.reLaunch({
        url: '/pages/index/index'
      });
    }
  }
});
回到顶部