如何将 WebAssembly 文本格式 (.wat) 的程序转换为 JavaScript 中的二进制格式?

How can I translate a program in WebAssembly Text Format (.wat) to binary format in JavaScript?

我想在 JavaScript 中制作一个简单的 WebAssembly 交互式 fiddle。鉴于用户以文本格式输入 WebAssembly 源代码,我如何将其转换为 运行 所需的二进制格式?

我正在寻找浏览器内 JavaScript 解决方案。

Binaryen - WebAssembly 的编译器基础设施 - 有一个官方 JavaScript / WebAssembly 端口,您可以从 JavaScript 开始使用,包括在浏览器中:https://www.npmjs.com/package/binaryen.

以下是如何使用它来解析 WAT、发出二进制文件并从中实例化模块:

var binaryen = require("binaryen");

// Create a module from a WebAssembly Text format
var myModule = binaryen.parseText(`(module
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (export "add" (func $add))
 (func $add (; 0 ;) (; has Stack IR ;) (param [=10=] i32) (param  i32) (result i32)
  (i32.add
   (local.get [=10=])
   (local.get )
  )
 )
)`);

// Emit module in a binary format
var wasmData = myModule.emitBinary();

// Use WebAssembly API to instantiate a compiled module
var compiled = new WebAssembly.Module(wasmData);
var instance = new WebAssembly.Instance(compiled, {});

// And use it
console.log(instance.exports.add(41, 1));

请注意,此特定示例使用 require(...) 目标 Node.js,但通过使用捆绑程序或在页面上包含指向使用 links in the docs.

来自其中一个 CDN 的 Binaryen 客户端版本