🧧悬赏解决:微信小游戏引擎分离与分包引发的毁灭性bug

  • Creator 版本: 2.2.2

  • 目标平台:微信版本7.0.6和7.0.6之前的版本

  • 重现方式:使用7.0.6的微信版本即可重现

  • 首个报错:not found alias cocos

  • 之前哪个版本是正常的: 7.0.7和之后的版本都能进入游戏

  • 手机型号:Android vivo

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:必现

最近在优化游戏首包代码大小的时,当看到了微信官方的一篇推文:https://developers.weixin.qq.com/community/develop/article/doc/000026eff00e58bf17b97656051013
时候激动了好久好久,按照上面的描述和底部的cocos demo花了一天的时间撸了一个分包的版本提审。
使用微信后台的测试,优化前的性能和优化的性能对比:

优化前:

优化后:

看着上面的数据感觉一天的辛苦没有白费,猜想启动数据会有明显的提升,没有想到是后台数据滑铁卢的下滑,现实太残酷:

最后排查的原因是采用了引擎分离和子包加载逻辑代码,在低版本7.0.6以后requirePlugin(‘cocos’)插件的不兼容,导致报错,无法进入游戏。

忘大神和官方人员能提供好的解决方案,红包:red_gift_envelope:奉上,我的微信小游戏项目结构:

主包的game.js画一张启动图并去加载子包:

主包的game.json配置:

子包的game.js就是cocos编辑器打包的game.js加载逻辑代码和引入引擎分离插件

出现低版本的微信报错:

提示:
不开启引擎分离,一切都完美。
开启引擎分离情况下,不把游戏逻辑代码分包,一切也完美。
开启引擎分离、游戏逻辑代码分包,低版本加载引擎插件处报错,导致游戏进入不了

希望官方或者社区大神能提供解决方案,有偿感谢。
如果能按照微信首屏优化分包的方式解决低版本的兼容问题,之后会把优化的整个过程分享给同样想去优化首包大小的社区朋友。

demo下载: webchatgame_demo.zip (564.5 KB)

1、请自动分配测试appid
image

2、添加插件
image

3、使用7.0.6或者7.0.6之前的微信体验

要不试下把requirePlugin(‘cocos’);移到加载子包之前.

我这没有手机测试, 要不试试改成这样?

这个方式我使用过。不好使,官方客服给了答案,子包不能引用插件。这样是无法使用了

在主包加载分包的回调里加载引擎插件, 然后再调用分包的函数来运行原来加载引擎插件后面的代码?
回调不行的话, 在分包里设定一个全局变量, 在主包定时检测这个变量, 检测到了就加载引擎插件?

试了一下,来不及,截图下面的依赖cc。
image

我试着把libs这些加载放到主包,子包加载游戏逻辑代码,不太顺利

libs及后续这些在分包里都丢到一个全局函数, 主包加载插件后再运行?


这样的方式做的,子包和主包是隔离的,libs里面的东西找不到cc

我试着把libs加载放到主包,这样就能使用引擎分离插件,子包只去下载src目录下的代码和res资源,不太顺利。

我试了下, 在开发者工具里是没问题的.

把你的工程发过来,我按照你的方式试一试。
微信号发过来,不论成不成功都发红包给你,感谢帮忙

红包算啦, 共同学习
webchatgame_demo.zip (542.2 KB)

我真机试了下, 可能需要防御一下window不存在的情况, 或者用GameGlobal
image

我的做法是放弃了引擎分离,因为用论坛的方法,已经把引擎代码放到了子包中,在加载引擎之前就已经渲染了首屏,实际上已经达到了分离引擎的目的,不知道你为啥执着于要勾选分离引擎呢?

:+1:,非常的严谨,一直还在测试全局变量了global和window了。

勾选引擎分离,是为了让自己公司的产品(例如都是2.2.3分离插件)能共享cocos类库,同引擎插件版本的游戏产品不用去下载引擎cocos代码。
如果把cocos引擎放到子包,有or没有勾选引擎分离都会加载cocos类库代码。