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