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
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