66个版本 (36个重大更改)

0.216.0 2024年8月22日
0.215.0 2024年7月31日
0.214.0 2024年7月16日
0.202.0 2024年3月26日
0.0.0 2022年5月10日

WebAssembly中排名第5

Download history 28005/week @ 2024-05-02 30634/week @ 2024-05-09 35872/week @ 2024-05-16 29799/week @ 2024-05-23 32715/week @ 2024-05-30 28988/week @ 2024-06-06 38449/week @ 2024-06-13 41370/week @ 2024-06-20 44389/week @ 2024-06-27 31594/week @ 2024-07-04 36787/week @ 2024-07-11 47702/week @ 2024-07-18 52342/week @ 2024-07-25 48975/week @ 2024-08-01 44934/week @ 2024-08-08 43858/week @ 2024-08-15

每月下载量199,064
77个crate中使用(直接使用43个)

Apache-2.0…

2.5MB
57K SLoC

wit-component

wit-component是一个crate,用于创建和与基于组件模型提案的WebAssembly组件交互。

命令行使用

wit-componentcrate可以通过wasm-toolsCLI套件中的两个子命令获得

# 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接口,以查看它导出和打算导入的接口。

使用

请注意,这个软件包旨在作为组件工具的低级详细信息。开发人员不一定会在日常工作中与这些工具交互,而是使用如cargo-component这样的封装器,它会自动执行wit-component来生成组件二进制文件。

首先,wit-component支持WIT包的基于wasm的编码。

$ 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运送到组件运行时或嵌入到宿主中。

依赖项

~2.9–4MB
~67K SLoC