1 个不稳定版本
0.205.0 | 2024年4月19日 |
---|
#1409 in WebAssembly
在 wasi-update 中使用
2.5MB
57K SLoC
wit-component
wit-component
是一个用于基于 组件模型提案 创建和交互 WebAssembly 组件的 crate。
命令行使用
通过 wasm-tools
命令行工具包,wit-component
crate 可通过两个子命令获得
# Create a component from the input core wasm module
$ wasm-tools component new core.wasm -o component.wasm
# Extract a `*.wit` interface from a component
$ wasm-tools component wit component.wasm
功能
-
从输入的核心 WebAssembly 模块创建 WebAssembly 组件二进制文件。输入模块通过 规范 ABI 与使用
*.wit
文件 描述的导入和导出接口进行通信。wit 接口可以直接嵌入到核心 wasm 二进制文件中。 -
支持“适配器”,可用于将旧版核心 WebAssembly 导入函数桥接到 组件模型 函数。适配器本身是核心 wasm 二进制文件,将被嵌入到最终组件中。适配器的导出可以被主核心 wasm 二进制文件导入,然后适配器可以调用组件模型导入。
-
可以从现有组件中提取
*.wit
接口,以查看其导出和打算导入的接口。
使用方法
请注意,此 crate 的目的是组件工具的低级细节。开发者可能不会每天与这种工具交互,而是使用 cargo-component
等包装器,该包装器将自动执行 wit-component
以生成组件二进制文件。
首先,wit-component
支持基于 wasm 的 WIT 包编码
$ cat demo.wit
package my:demo;
interface host {
hello: func();
}
world demo {
import host;
}
$ wasm-tools component wit demo.wit -o demo.wasm --wasm
# The output `demo.wasm` is a valid component binary
$ wasm-tools validate --features component-model demo.wasm
$ wasm-tools print demo.wasm
# The `*.wit` file can be recovered from the `demo.wasm` as well
$ wasm-tools component wit demo.wasm
工具链作者可以使用 wit-component
将此组件类型部分嵌入到核心 wasm 二进制文件中。在这里,我们将使用一个原始的 *.wat
wasm 文本文件进行小型演示,其中 demo.wit
参数是手动指定的,然而。
$ cat demo.core.wat
(module
(import "my:demo/host" "hello" (func))
)
$ wasm-tools component embed demo.wit --world demo demo.core.wat -o demo.wasm
# See that there's a new `component-type` custom section
$ wasm-tools objdump demo.wasm
# Convert the core wasm into a component now
$ wasm-tools component new demo.wasm -o demo.component.wasm
# Like before the output `demo.wasm` is a valid component binary
$ wasm-tools validate --features component-model demo.component.wasm
$ wasm-tools print demo.component.wasm
# Additionally like before the `*.wit` interface can still be extracted
$ wasm-tools component wit demo.component.wasm
这里,可以将 demo.component.wasm
运输到组件运行时或嵌入到宿主中。
依赖项
~3–4MB
~67K SLoC