将 WebAssembly 转换为 JS

查看完整源代码

目前并非所有浏览器都支持 WebAssembly(尽管所有主流浏览器都支持)。如果您想支持旧版浏览器,您可能需要一种不需要同步维护两个代码库的方法!

幸运的是,来自 binaryen 的一个名为 wasm2js 的工具可以将 wasm 文件转换为 JS。如果成功生成,此 JS 文件等效于 wasm 文件(尽管稍微大一些,速度也慢一些),并且可以加载到几乎任何浏览器中。

此示例相对简单(借鉴了 console.log 示例)

#![allow(unused)]
fn main() {
use wasm_bindgen::prelude::*;

// lifted from the `console_log` example
#[wasm_bindgen]
extern "C" {
    #[wasm_bindgen(js_namespace = console)]
    fn log(s: &str);
}

#[wasm_bindgen(start)]
fn run() {
    log("Hello, World!");
}
}

真正的魔力发生在您实际构建应用程序时。在 wasm-bindgen 之后,我们在这里看到如何在构建脚本中执行 wasm2js

#!/bin/sh

set -ex

# Compile our wasm module and run `wasm-bindgen`
wasm-pack build

# Run the `wasm2js` tool from `binaryen`
wasm2js pkg/wasm2js_bg.wasm -o pkg/wasm2js_bg.wasm.js

# Update our JS shim to require the JS file instead
sed -i 's/wasm2js_bg.wasm/wasm2js_bg.wasm.js/' pkg/wasm2js.js
sed -i 's/wasm2js_bg.wasm/wasm2js_bg.wasm.js/' pkg/wasm2js_bg.js

请注意,wasm2js 工具还处于早期阶段,因此可能会遇到许多错误或需要解决的方法。如果遇到任何错误,请随时向 upstream 报告!

另请注意,最终,您的捆绑器将理想地自动完成此操作,您无需通过 wasm2js 在旧版浏览器中进行任何操作!