【问题标题】:Error instantiating WASM module: "module is not an object or function"实例化 WASM 模块时出错:“模块不是对象或函数”
【发布时间】:2020-06-04 12:11:57
【问题描述】:

我试图在 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


    【解决方案1】:

    您的模块似乎依赖于wasi_unstable API。如果您想加载它,您将需要该 API 的实现。

    要准确了解您的模块需要哪些导入,您可以分别使用 wabt 和 binaryen 项目中的 wasm2watwasmdis 工具。

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

    如果您使用 wasi-sdk 构建您的 wasm 模块,那么您需要某种用于 WASI API 的 web polyfill。

    【讨论】:

      【解决方案2】:

      这将使错误消失:

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

      【讨论】:

      • 不幸的是,这对我没有帮助。
      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多