5 个不稳定版本
0.3.1 | 2022年1月4日 |
---|---|
0.3.0 | 2022年1月1日 |
0.2.1 | 2022年1月1日 |
0.2.0 | 2021年12月31日 |
0.1.0 | 2021年12月31日 |
排名第1718的开发工具
每月下载量637次
11KB
118 行
简单的WASM运行器
这是一个简单的包装程序,用于运行WASM运行时(目前是wasmer
或 wasmtime
)作为运行器,用于诸如 cargo run
之类的操作。当想要使用如 wasm32-wasi
这样的目标,而不受 wasm-pack
的约束时,这很有用,例如,仅运行 cargo run
或 cargo test
在 wasm32-wasi
目标包中。Cargo 预期运行器会先接受程序可执行文件,然后是其参数,而大多数WASM运行时对其参数有特定的结构(例如,在程序参数前需要使用 --
)。
如 cargo-wasi
之类的解决方案是一个很好的、更集成的解决方案,但如果您想或需要控制WASM运行时的执行方式(例如,将运行时选项传递给运行器),这个简单的包装器可能符合您的需求。
用法
使用 cargo 安装运行器
$ cargo install wasm-runner
您可以直接从源树安装
$ cargo install --path=.
之后,您现在可以拥有一个 .cargo/config.toml
文件,该文件使用此运行器执行WASM目标的二进制文件。
例如
[target.'cfg(target_arch="wasm32")']
runner = ["wasm-runner", "wasmer"]
这假设 wasmer
在您的 PATH
中,但您也可以指定完整路径。
在此假设 wasm32-wasi
已作为目标安装到您的工具链中(例如,rustup target add wasm32-wasi
),您可以使用以下方式运行单元测试或二进制文件
$ cargo --target wasm32-wasi test
$ cargo --target wasm32-wasi run -- some arguments
有一些环境变量可以增加额外的可配置性(例如,Cargo 配置键 [env]
)
- 可以将
WASM_RUNNER_VERBOSE
变量设置为(例如1
)以获取运行器正在执行的诊断输出。 - 环境变量
WASM_RUNNER_RT_ARGS
可以接受一个字符串 JSON 数组来传递运行时参数。
如果您愿意,可以选择不使用配置文件来运行所有内容
$ WASM_RUNNER_RT_ARGS='["--enable-all", "--llvm"]' \
WASM_RUNNER_VERBOSE=1 \
CARGO_TARGET_WASM32_WASI_RUNNER="wasm-runner wasmer" \
cargo run --target=wasm32-wasi -- hello world
示例应用
在 test-wasm
文件夹中有一个简单的 crate,它配置为使用 wasmer
运行包装器。
$ (cd test-wasm && cargo run --verbose -- hello world)
TODO
- 对
wasmtime
的 CI 测试。 - 支持其他运行时,例如
wavm
。
许可证
本项目采用 Apache-2.0 许可证。
依赖项
~2–11MB
~127K SLoC