如何将 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# 方法