6 个版本 (重大更改)
0.5.0 | 2024 年 7 月 22 日 |
---|---|
0.4.0 | 2024 年 7 月 9 日 |
0.3.0 | 2024 年 5 月 20 日 |
0.2.0 | 2024 年 5 月 16 日 |
0.0.0 | 2024 年 4 月 16 日 |
#1298 in WebAssembly
每月 126 次下载
620KB
13K SLoC
概述
wac
是一个用于组合 WebAssembly 组件 的工具。
该工具使用 WAC(发音为 "whack")语言来定义如何组合组件。
WAC 语言
wac
语言是用于描述组件如何组合的 wit
的声明式超集。
例如,想象两个名为 name.wasm 和 greeter.wasm 的组件。
name.wasm 的 wit 如下所示
package example:name;
world name {
/// Exporting a 'name' function that returns a name to greet.
export name: func() -> string;
}
greeter.wasm 的 wit 如下所示
package example:greeter;
world greeter {
/// Importing a 'name' function that returns the name to greet.
import name: func() -> string;
/// Exporting a 'greet' function that returns a greeting using the name.
export greet: func() -> string;
}
以下是一个 wac 文件示例,它通过将 name.wasm 的 "name" 导出插入到 greeter.wasm 的 "name" 导入中来组合这两个组件。
package example:composition;
// Instantiate the `name` component
let n = new example:name {};
// Instantiate the `greeter` component by plugging its `name`
// import with the `name` export of the `name` component.
let greeter = new example:greeter {
name: n.name,
};
// Export the greet function from the greeter component
export greeter.greet;
编码此组合的结果是一个不导入任何内容且仅导出 "greet" 函数的单个组件。
有关 wac
语言的完整描述,请参阅 语言指南。
安装
要从源代码安装 wac
CLI,请运行以下命令
cargo install wac-cli
如果您已安装 cargo-binstall 工具,则可以通过预构建的发布工件安装 wac
CLI,从而节省安装时间
cargo binstall wac-cli
用法
wac
CLI 工具有以下命令
wac plug
- 将一个或多个其他组件的导入插入到组件中。wac compose
- 使用提供的 WAC 源文件组合 WebAssembly 组件。wac parse
- 将组合解析为 AST 的 JSON 表示形式。wac resolve
- 将组合解析为 JSON 表示形式。
快速简单组合
要执行简单组合,请使用 wac plug
命令
wac plug my-socket.wasm --plug my-plug.wasm -o plugged.wasm
或混合发布到 Warg 注册表的包
wac plug my-namespace:package-name --plug some-namespace:other-package-name -o plugged.wasm
编码组合
要执行组合,请使用 wac compose
命令
wac compose -t input.wac
这将使用 input.wac
来执行组合并将组件的文本表示写入 stdout。
wac compose -o output.wasm input.wac
这将执行 input.wac
中指定的组合,并输出名为 output.wasm
的 WebAssembly 组件。
依赖项
默认情况下,wac
将创建一个组件,该组件在其内部嵌入其依赖项(即 WAC 源文件中引用的包)而不是导入这些依赖项;要使依赖项在输出组件中导入,请使用 --import-dependencies
标志
wac compose --import-dependencies -o output.wasm input.wac
依赖项可以位于一个 deps
子目录中,其结构如下
deps/
├─ <namespace>/
│ ├─ <package>.wasm
依赖项也可以是 WIT 文件或包含 WIT 包的目录
deps/
├─ <namespace>/
│ ├─ <package>/
│ │ ├─ a.wit
│ │ ├─ ...
可以使用 --deps-dir
命令行选项来指定搜索依赖项的不同目录。
也可以使用 --dep
命令行选项指定特定依赖项的位置
wac compose --dep foo:bar=./baz.wasm -o output.wasm input.wac
默认情况下,依赖项必须是二进制编码的 WebAssembly 组件;要启用对 WAT 文件的支持,请使用 wat
构建时功能。
如果使用默认功能构建,则依赖项可以从 Warg 注册表自动解决,并且不需要存在于 deps
子目录中或通过 --dep
命令行选项指定。
依赖项
~18–35MB
~525K SLoC