当js引用ts时,奇葩的小米快游戏 require 加上圆括号的bug

  • Creator 版本: 2.4.x

  • 目标平台:小米快游戏

  • 重现方式:小米快游戏调试器,勾选调试,运行Demo 必现

  • 首个报错:
    提示:找不到文件TsFile.js

  • 之前哪个版本是正常的:一直不正常

  • 手机型号:小米手机

  • 重现概率:100%

问题代码:
2.4.x, js引用ts的模块,其中ts中模块声明如下,必须使用export default
image

js引用如下:
image

就这么简单,在小米快游戏上就会报错。而同样的代码在oppo,vivo,微信,抖音小游戏都是正常的。
报错如下面的图片所示,找不到资源,TsFile.js这个文件找不到。

经过我对打包后代码(勾选调试模式打包:assets/main/index.js)的跟踪,发现报错出现在下图标记的代码。
image

这段require代码提示找不到文件,当我把代码改成下面这样,然后执行小米平台的命令npm run build打包调试,就正常了。但是实际上_interopRequireDefault并没有做任何处理。
image

所以接下来发生的就诡异了,真正奇葩的事情是,我仅仅在require旁边加上括号,又会报同样的错误,提示找不到Tsfile.js。如下图示。仅仅在require()函数左右加上圆括号,继续报同样的错误。
image

事实证明,报错跟_interopRequireDefault这个函数没有任何关系,也不是它的错。

所以问题来了,为什么加了圆括号的require,就报错了??我的经验来说的话,应该是小米平台有些特殊处理或特殊原因,但是因为能力有限,无法深究,坐等高手指教,谢谢!
PS:如果没有大佬帮我解决,我当前预想的解决方案,打包后,自动替换build目录下index.js中的代码:_interopRequireXXX(require(xx)),替换为require(xx)。这种方式只能解决勾选了调试的情况。。我去。。

下面是我做的Demo,很简单。用的是2.4.7(2.4.11实测一样的问题。)
TestRequire.zip (246.3 KB)

重要补充:上面说的都是构建页面,勾选调试模式出现的问题。当release模式时,是正常的。

@_PP 大佬能看下吗 @jare

请问解决了吗

release 发布不会有这个问题,debug模式,我自己写了构建钩子,自动替换index.js里面的问题函数。

可以用quickgame 最新版本构建一下试试

如何使用最新版?

到cerator引擎下的xiaomi构建模板那用npm升级一下quickgame的版本

小米快游戏打包真的很奇葩,之前也是遇到过奇奇怪怪的问题 :joy:

请问这个具体怎么操作啊?或者哪里有详细说明吗?
感觉我也遇到这个问题了
谢谢~

找到方法了,就是在xiaomi-pack-tools 这个目录下
首先npm search quickgame,找到quickgame-cli的最新版0.1.21
把package.json直接运行里的quickgame-cli更新到本版本,
再运行npm update 就可以了

但是,重新打包小米快游戏后发现,问题还是没有解决…

哪有小米 xiaomi-pack-tools 这个目录???

有没可以测试的demo包呢? 我看我这边环境打出来是不是一样的

bro, 我用楼上得demo打出得rpk调试包没有任何问题呢, 可以看到 正常显示场景

你可以在引擎目录下全局搜索xiaomi文件夹

无法上传文件… 您的QQ多少?我发个rpk给您