3.6 子游戏热更新方案

bundle更新不是对比文件 md5 吗?index.js 里面的变更又怎么会影响到文件 md5 呢?

而且 creator 不支持同名文件吧

不同路径可以同名呀 不然xxx/a.ts ccc/a.ts ddd/a.ts

好像不是同一个问题 我的意思是 改b bundle 下的文件 导致 a b 和 main 的模块名称都发生了变更 不能单独更新 a bundle 需要按顺序 先更新 main 然后再更新 a 单独更新a 会导致依赖的模块不存在或者是错误的模块 因为新打的包 模块名称都发生了变更,原因就是他是根据文件名称生成的模块名称而不是路径

避免同名,问题解决,反正我只记得不能同名,之前的问题是什么不记得了,你这个问题也不就是同名造成的吗

是呀 不行就只能不同名了 就是想看有别的方案没有呀

emmmmmmmmmm
要不问下官方???

1赞

我就是3.6测试的呀 文件名称一样 打包会 会导致模块名称变乱

1赞

@shrinktofit

我用的是热更新加远程bundle的混合方式,远程bundle主要用于缩小部分包体,因为远程bundle要勾选md5,而热更勾选md5会导致模块化的子游戏模块更新异常,所以用jenkins自动构建两次,一次构建远程bundle md5的最新版本,构建完上传远程bundle到cdn,再构建非md5的热更资源补丁包上传到cdn

1赞

持续关注.
我也发现脚本没法被注销掉.

话说加载过bundle之后,二次更新,脚本能被卸载重新加载吗?我这边测试是不行的,但是资源文件是可以的,就是脚本不行,有没有解决方案?

请问是怎么卸载旧代码?我目前也是遇到已经加载的脚本,即时热更了新的代码但是还是用之前的

remove掉代码的所有缓存目录

兄弟可以具体点吗

我就是想混合用,就是考虑bundle 要勾选md5,而热更新又不能勾选md5而纠结。

大佬,热更新不应该是在文件中加上MD5这种唯一标识才能实现吗

大佬们

你们有遇过有脚本代码被打包到打包到src/chunks/bundle.js而不是原本的bundle里吗?

一但有被包到的脚本,那段就没办法热更新了

@shrinktofit 有类加载缓存的 清理掉就好了 你看下类缓存的地方

这个是我们目前的方案 需要注意的就是ccclass 和文件名称保持一致 不同bundle 文件名称最好不要一样

另外关于pb生成的js文件热更新 这边的方案是用脚本把 pb 生成的 js 文件和 d.ts 文件 合并 并修改 js中语法的错误

项目已经准备上线 现在还有一些崩溃的问题需要解决基本就是都是资源意外被释放了

1赞

参考了下现有的热更新卸载修改成下面了


同步了3.7.2子包依赖main配置的bug 通过bundle名称找需要卸载的classs和其他信息