将 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
在旧版浏览器中工作!