WebAssembly:TypeError:WebAssembly实例化:必须存在Imports参数

时间:2017-12-31 02:43:53

标签: javascript webassembly

我正在尝试使用WebAssembly,主要依靠WebAssembly developer's guide和最近的JSConf talk。我可以编译一个令牌hello world程序,我可以查看生成的HTML页面来查看结果。到目前为止一切都很好。

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

错误消息似乎说我需要第二个," importObject"参数,即使MDN documentation说这个参数是可选的。更糟糕的是,MDN页面几乎没有谈到该importObject的结构和内容。我已经能够通过谷歌搜索博客和github问题拼凑一些想法。看起来我可能需要一个" env" key和WebAssembly内存对象?

那么......为什么导入对象需要,即使它被记录为可选的?我在哪里可以找到导入对象的详细文档?为什么它在JSConf谈话中有效但不适合我?

1 个答案:

答案 0 :(得分:2)

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

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

然后你需要提供一个像

这样的导入对象
{
  a: {f: function (...) { ... }, g: function (...) {...}},
  b: {m: new WebAssembly.Memory(...)}
}

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