【bundle】关于Bundle热加载,脚本更新的问题

描述:
采用不用md5 cache的方式,自己在build之后为cc.config.json和index.js增加版本标识,生成manifest文件,走热更模式。目前能实现首次启动游戏之后能更新到最新的bundle,但是更新之后回到大厅,这时候服务器重新配置新的bundle,二次进入能检测到更新,并且成功更新,此时看手机目录已经更新到对应的脚本文件,但是进入bundle还是用了之前的脚本,进入之前已经
bundle.releaseAll();
assetManager.removeBundle(bundle);
资源可以成功更新,但是脚本没有生效,需要重启游戏才能生效。

creator版本:3.6.1

问题:
Bundle二次更新,脚本无法热更新的问题,(需要重启)

解决方案:
还不清楚,看了论坛的很多人都遇到,试了各种方法还是不行,包含大厅子游戏插件里面说到的修改引擎文件,还有增加delClassById和delClassByName的方式也无法实现。

目前有大佬知道如何解决的吗???

6赞

2.4.x是改这

知道3.x版本对应的代码


我试试看。

加了,如下:


打包出来会报错

那就不清楚了,没用3.x

拉姐 :ox: :frog:

都已经放弃bundle
开发的时候居然不能加载其他项目中的bundle(有代码);
什么垃圾设定

加载应该是可以的,就是热加载代码还是有问题。还是实现不了真正的脱离

开发的时候。是不行的。当前另一个项目bundle中有代码,用到了Component之类的,加载就报错,
必须两个项目都编译,后合并一个json文件才可以。

跨项目服用bundle确实没有测试过,后面看看,还是看下先怎么解决代码无法热加载的问题,感觉这个问题没有解决,用起来还是不爽

你没发现你改的脚本最后那个括号位置不对吗?

嗯嗯,这个后面修改正常了,也还是不行,主要3.6.1这个版本调试,热更之后重新加载bundle就没有进入到这里的逻辑了。只有首次加载才会执行

最后实现了吗?

我觉得这个需要官方人员关注一下 @450894613

你们项目通过官方模式进行bundle热更新能在bundle的代码运行过一次后,热更新后的代码能不重启生效吗?

没有呢,目前没有找到如何卸载js代码的接口

我把downloader里面缓存删掉也没用

function downloadScript (url, options, onComplete) {

if (typeof options === 'function') {

    onComplete = options;

    options = null;

}

if (loadedScripts[url]) return onComplete && onComplete();

download(url, function (src, options, onComplete) {

    window.require(src);

    loadedScripts[url] = true;

    onComplete && onComplete(null);

}, options, options.onFileProgress, onComplete);

}

???啥意思

这样定制应该是可以的 ,只要热更完,移除当前热更bundle的所有资源和缓存,之后重新加载,应该没问题的 3.6.1(没试过哈。)