将 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
在旧版浏览器中进行任何操作!