小游戏远程包中遗留在主包代码的简单处理

现状

如果有打远程包的,会发现打完远程包后,将会有一个对应文件夹在bundle-scripts下面,即使远程包没有代码也会生成该文件,每个文件大概4KB,如果远程包数量不多,倒也没关系,但是如果远程包数量过多或者远程包里面有代码,那这个大小可能超过1mb,加上引擎可能就超过了4MB的限制,下面给出一种最简单的方式处理该问题。

处理方式

在不改动引擎的前提下,
第一种方式是如果是因为远程包有代码,但建议将代码单独分包,这种需要稍微修改下项目结构,自行处理即可。
第二中方式是如果远程包是因为多或者确实不方便挪动代码,那么我们可以考将代码进行小游戏分包,其实这个也很简单,下面说下步骤

  1. 在game.json里面添加这个文件做为分包
{
// ...
    "subpackages": [
        // ...
       {
           "name":"分包名",
           "root":"src/bundle-scripts/"
       }
    ]
// ...
}
  1. 小游戏分包,要求必须有一个game.js的入口文件,因此在目录src/bundle-scripts/下创建一个空的game.js文件
  2. 在第一次加载远程分包前,先加载该分包

一些优化

  1. 可以考虑进行预加载
  2. 如果是某个远程分包的代码比较多,可以更细致的分包

做成插件

本来想做成插件上商店,顺便赚点外快的,但是审核人员觉得我的质量不高
image
既然质量不高,就顺便直接提供下载吧
optimize-remote-bundle-scripts.zip (6.0 KB)
使用方式
在构建面板(目前支持微信小游戏和抖音小游戏),选择模式

  • 不处理,就相当于没有开启该插件
  • 自动加载,表示在引擎处理化时先加载该分包,适用于分包不大或一进游戏就要加载远程分包的情况
  • 手动加载,表示自己在第一次加载远程分包前,加载该分包

PS: 无论是安卓还是iOS,起步阶段都是野蛮生长,CocosStore里面插件数量少、同质化高,一开始就高要求,不知道好不好,当然这不是我该考虑的事,而且这里的审核意见我都认可,因为这个插件太简单了,花哨的外观也掩盖不了这个插件就只做了三步处理。

PS2: 我觉得这种功能,引擎处理是更好的,比如应该区分远程包是否有代码,进行差异化处理,允许设置该文件夹的分包类型等。

PS3: 如果自定义了引擎,引擎比较大,可以考虑另外一个插件,该插件把引擎也分包了(如果引擎没有自定义,建议不要使用该方案),Cocos Store

PS4: 私人赞赏,非常欢迎 :innocent:

good job

大佬,这个src/bundle-scripts/下面还一堆其他的bundle目录,还需要在每个bundle目录下新建1个game.js文件么?

不用的123

看看这个思路可以不。我还没处理这一部分,因为还有空间。

如果bundle内无代码的话,那么其index.js 里面只有一个字符串差异,这个字符串就是包名。
对这个js里面的代码封装一个函数,以包名为参数。
在请求的阶段,判断属于无代码包,就不用require,直接根据包名调用这个函数即可。文件都省下了。

嗯,当然可以,这样更精致。但我也没有处理,因为我这边空间也很足~
不过如果文件比较多,可能打包会变慢一点,毕竟遍历的文件会多些