如何将 webassembly 包含在 typescript 中(没有 nodejs)

Posted

技术标签:

【中文标题】如何将 webassembly 包含在 typescript 中(没有 nodejs)【英文标题】:How to include webassembly with typescript (without nodejs) 【发布时间】:2021-01-15 02:46:09 【问题描述】:

我想知道是否有任何方法,尽可能简单,将 webassembly 包含在 typescript 中,我不使用 node.js。 如果我在tsconfig.json 中激活选项allowJs: true 并手动移动wasm 文件,它就可以工作。 这个解决方案看起来不是很干净,因为我有两个非常相似的“胶水”文件(network_calculator_lib.js)。即便如此,我测试了它是否可以在同一个文件夹中编译,我可以想象它不能,它不允许覆盖文件。

我希望我对我的解释足够好。 我正在使用 Rust 编译带有 wasm-pack 的 Web 程序集,尽管我更希望能够直接导入 wasm。 作为网络服务器,我还使用了一个使用 actix web 用 Rust 编写的服务器。

如果我问一些非常愚蠢的问题,请提前道歉并感谢,但大多数使用 webpack / node,我没有找到任何可以澄清我的信息。

【问题讨论】:

Rust and WebAssembly book 似乎已经涵盖了您要查找的内容。 【参考方案1】:

这段代码解决了我的问题:

import init,  exported_wasm_func  from '../pkg/network_calculator_lib.js';
async function run() 
    await init(); // You need to call init before wasm functions.
    document.body.textContent = exported_wasm_func();

run()

对于有类似问题的人:

使用 Web 目标选项编译 rust:wasm-pack build --target web。 在 html 中,JS 文件或代码需要为模块类型:<script type="module" src="./scripts/js/index.js"></script>。 在 Cargo.toml 中:
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
Package.json 并不是真正需要的。

来源:https://aralroca.com/blog/first-steps-webassembly-rust

【讨论】:

以上是关于如何将 webassembly 包含在 typescript 中(没有 nodejs)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Go 语言开发的宿主程序中嵌入 WebAssembly

通过 WebAssembly 在 JavaScript 中调用 C# 方法

如何使用WebAssembly将Web应用的速度提高20倍(案例研究)

如何使用单纯的`WebAssembly`

如何将WebAssembly优化到1MB?

如何将C ++ 11代码编译为webassembly?