3.6 子游戏热更新方案

说说大家都是啥方案讨论下

bundle更新

已加载得js代码不能更新,而且打包得ts代码生成得js模块名称是按文件名称来得,一个项目多个相同名称会变成Func1,Func2 ··· 这样单独更新一个bundle 的时候可能会出现问题

1赞

已加载的不能更新,所以能不能卸载,然后再更新?没理由有bundle,却没有卸载bundle。
单独更新一个bundle,出现重名可能会出问题,所以,到底是按路径来的,还是按名字来的,而且这到底是bundle的问题,还是项目的管理问题。

卸载这个我已经找到了 需要清理文件搜索路径缓存 还有SystemJS 里面的模块缓存,目前还剩模块名称自定义的问题

IXT$U$BZZGC}QQGM3UH(L
ts编译后的js 文件 模块名字是按照文件名字来的相同项目 不同bundle 有相同名字就会 1,2,3的往上加

因为bundle 是分开更新的 正常来说bundle 应该相互独立 这边打包的时候 模块名称是根据整个项目 相同文件自增的 如果别的bundle 文件名称发生变更可能会影响到未更新的bundle

其实正常来说,你说的问题是bundle必须要解决的基础问题。
1,2,3,这种索引往上加,这种是为了加密把,并不是说编译就是喜欢这么干,
你自己查看就会发现其实所有的代码都会在一个文件里,代码基本是整个替换的。
而且bundle基本都是独立的,怎么可能出现一个bundle的代码会影响另一个bundle,想想就不合理。
总的来说,你这个担心是多余的,如果实在不放心,实践一下就知道了

  • 整包更新,大版本
  • bundle 更新
    • zip:初次下载或间隔版本过大
    • 默认:小版本更新

bundle更新代码这块疑问比较多 System.register(“chunks:///_virtual/internet3.ts” … chunks:///_virtual/internet3.ts 是更加 项目内internet文件个数自动生成的 那么每次重新打包bundle 这个名字可能发生变更导致更新单一bundle 会出错 我理解的应该没问题吧

你正常使用会报错引擎开发 bundle 还有什么用呢?只要自己不要去引用未加载的 bundle 脚本和资源就不会有问题

其实我的意思是bundle 更新 因为单独一个bundle 更新是不是意味着用户端加载的bundle 可能不是同一次打包出来的bundle 上面说的打包生成的System.register(“chunks:///_virtual/internet3.ts” internet3 在工程里面实际是文件 …///internet.ts 文件 因为有3个同名的文件所以生成的模块名称就成了internet3 哪如果下一次打包的时候internet3 变成了 internet2 哪其他没更新的bundle 还是依赖以前的internet3 是不是就找不到模块了

然后bundle 热更新的第一步需要加载当前bundle 的版本对比文件 加载bundle 就会取加载 index.js 然后因为依赖变了是不是 就出问题了

不多说,上个会报错的demo

谁有模块缓存的解决方案 :grinning:

修改下SystemJS 新增一个清理函数

已经测试过可以重新加载

有demo么,给我发一份。 :rofl: :rofl:

还没合并工程 这边也是在研究过程中只是测试了一些方案

android.zip (1.8 MB)
old 是第一次打包的代码 new 是第二次打包 修改了 b子包的文件名称 对比2次生成的代码看
@1195725454 这就是我说的 会相互影响

多谢 :smiley: