【问题标题】:WebAssembly: TypeError: WebAssembly Instantiation: Imports argument must be presentWebAssembly:TypeError:WebAssembly 实例化:必须存在 Imports 参数
【发布时间】:2018-06-10 21:28:18
【问题描述】:

我正在努力跟上 WebAssembly 的速度,主要依靠 WebAssembly developer's guide 和最近的 JSConf talk。我可以编译一个token hello world程序,我可以查看生成的HTML页面来查看结果。到目前为止一切顺利。

问题:18:22 的 JSConf 谈话建议我可以获取 wasm 文件,从响应中获取数组缓冲区,然后从缓冲区中实例化,我应该得到一个承诺。但是当我尝试这样做时——无论是在最新的 Chrome 稳定版、Chrome canary 还是最新的 Firefox 中——我都会得到type error。

错误消息似乎说我需要第二个“importObject”参数,尽管MDN documentation 说这个参数是可选的。更糟糕的是,MDN 页面几乎没有谈到 importObject 的结构和内容。我已经能够从谷歌搜索博客和 github 问题中收集到一些想法。看起来我可能需要一个“env”键和一个 WebAssembly 内存对象?

那么...为什么导入对象是必需的,即使它被记录为可选?在哪里可以找到导入对象的详细文档?为什么它在 JSConf 演讲中有效,但对我无效?

【问题讨论】:

标签: javascript webassembly


【解决方案1】:

仅当您实例化的模块不导入任何内容时,才可以省略导入对象。否则,您需要提供一个包含所有必需导入的对象。例如,如果模块有

(import "a" "f" (func ...))
(import "a" "g" (func ...))
(import "b" "m" (memory 0))

那么你需要提供一个类似的导入对象

{
  a: {f: function (...) { ... }, g: function (...) {...}},
  b: {m: new WebAssembly.Memory(...)}
}

当然,实际的导入值也可以是预定义的对象,或者更有趣的是从另一个 Wasm 实例导出。

【讨论】:

  • 是否有地方可以找到有关导入对象的更深入的文档?或者更多例子?谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2019-11-24
  • 2022-10-24
  • 2021-10-16
  • 2019-03-21
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多