实例化WASM模块时出错:“模块不是对象或函数”

问题描述 投票:0回答:2

我正在尝试在node.js中本地实例化.wasm文件。目标是在本地运行二进制文件并复制网页的功能。这是我的最小可复制示例:

const fetch = require("node-fetch");

const importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('https://www.supremenewyork.com/ticket.wasm').then(response =>
  response.arrayBuffer()
).then(bytes => {
  let mod = new WebAssembly.Module(bytes);
  let instance = new WebAssembly.Instance(mod, importObject);
  instance.exports.exported_func();
})

我得到的错误是:TypeError: WebAssembly.Instance(): Import #0 module="wasi_unstable" error: module is not an object or function

我看到了一些类似问题的问题,但是没有提供真正的解决方案。这是我第一次与wasm合作,所以我很失落。

感谢您的帮助。

javascript node.js webassembly wasm
2个回答
0
投票

您的模块似乎取决于wasi_unstable API。如果要加载它,则需要该API的实现。

要确切了解模块需要什么导入,可以分别使用wabt和binaryen项目中的wasm2watwasmdis工具。

如果您使用emscripten构建wasm模块,那么建议的做法是让emscripten生成JS,以实现这些API,并为您加载模块。

如果使用wasi-sdk构建wasm模块,则需要WASI API的某种Web polyfill。


0
投票

这将使错误消失:

const importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    },
    wasi_unstable: () => {}
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.