# wasm-plugin # initialization # run-wasm # init # targeting # exists

wasm-init

假设在针对 WebAssembly 的 Rust 中存在 life-before-main

4 个版本

0.2.2 2023 年 8 月 28 日
0.2.1 2023 年 8 月 26 日
0.2.0 2023 年 8 月 25 日
0.1.0 2023 年 8 月 25 日

659 / WebAssembly

MIT 许可证

7KB
65

假设在针对 WebAssembly 的 Rust 中存在 life-before-main。

安装

在项目中添加对 wasm-init 的依赖。这个 crate 故意为非 wasm 平台提供了 no-op 实现,因此不需要 cfg 处理,并且我们不引入未使用的额外依赖。

[dependencies]
wasm-init = "0.2"

用户代码

在 Rust 端根据需要添加尽可能多的 wasm_init! 调用,例如用于去中心化插件注册或从使用特定 derive 宏的所有类型收集数据。

wasm_init::wasm_init! {
	// literally any code you want to run at startup goes here
}

初始化

为了确保您的 wasm_init! 调用在启动时执行,您有三个选项。请注意,所有这些选项都是幂等的 - 多次调用是完全安全的(即使不必要),即使在多线程环境中也是如此。

自动初始化功能

如果您想跳过手动初始化 wasm-init,您可以在依赖关系中启用 auto-init 功能。

[dependencies]
wasm-init = { version = "0.2", features = [ "auto-init" ] }

但请注意,这将阻止您在其他项目部分使用 wasm bindgen start 函数

从 Rust

在您的 Rust 入口点调用 wasm_init::wasm_init 函数。

从 JavaScript/TypeScript

从您的构建模块中调用 wasm_init 导出。

<script type="module">
	import init, { wasm_init } from "./pkg/my_wasm_crate.js";
	init().then(() => {
		wasm_init();
		// now do things as normal!
	});
</script>

为什么?

inventory 等工具很酷,但目前还不能用于针对 wasm32-unknown-unknown 或类似的架构。

依赖项

~0–320KB