将 WebAssembly 转换为 JS

查看完整源代码

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

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

这个例子比较简单(借鉴了 console.log 示例)


# #![allow(unused_variables)]
#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 在旧版浏览器中工作!