cocos creator 3.x发布到微信小游戏如何兼容 wasm

将 emscripten编译出的 js 和 wasm 文件引入 3.8 项目,运行流程是先读取 wasm 文件中的二进制内容并加载为 ArrayBuffer ,然后用这个ArrayBuffer 初始化 WebAssembly module。该机制在 web 环境下运行正常,构建微信小程序后开发者工具和真机运行均报错:WebAssembly.instantiate的第一个参数必须是 string。看了微信小游戏文档中的 wasm 支持,发现首参数必须传入 wasm 的文件 path 而不能是 ArrayBuffer,经实验 WebAssembly.instantiate 和 WebAssembly.compile 皆是如此,看到 cocos 集成了 spine.wasm,但文档和论坛都没有自定义 wasm 模块的微信小游戏环境兼容的相关教程和 demo。有没有大佬有推荐的低成本实现方案推荐呢?

1赞

直接手撸一个js解释器?

莫沉啊,求个方案

楼主有解决这个问题么?目前仿照spine.wasm的载入方式可以在pc和mobile的web端正常运行自定义的wasm。但是发布到微信小游戏后,载入游戏时就会有报错,找不到wasm对应的js文件。
image

微信有加载wasm的接口

问题已经定位:

  1. 小游戏的game.js中,动态注册不能有依赖,否则会报找不到的问题。需要类似spine这样保证System.register的第二个参数是[]:
    企业微信截图_170867744832
  2. 因为微信方不支持动态执行JS代码,所以wasm对应的js文件不能有动态生成函数api如 new Function、eval、Function.prototype.constructor等,否则会报typeerror: (intermediate value) is not a function错误

如何emscripten编译出的js,wasm引入3.8项目呢,编辑器运行就报错了。
步骤是把生成的.js和.wasm放到assets目录下,编译时就报错。