#run-wasm #run #wasm-bindgen #serve #cargo

cargo-run-wasm

在浏览器中简单运行 wasm 应用程序和示例

7 个不稳定版本

0.4.0 2024 年 5 月 28 日
0.3.2 2023 年 3 月 27 日
0.3.0 2022 年 12 月 20 日
0.2.0 2022 年 10 月 9 日
0.1.0 2022 年 1 月 5 日

#44WebAssembly

Download history 1968/week @ 2024-05-04 3041/week @ 2024-05-11 1521/week @ 2024-05-18 2528/week @ 2024-05-25 1945/week @ 2024-06-01 1806/week @ 2024-06-08 1444/week @ 2024-06-15 2311/week @ 2024-06-22 2455/week @ 2024-06-29 2577/week @ 2024-07-06 3477/week @ 2024-07-13 2280/week @ 2024-07-20 1820/week @ 2024-07-27 2572/week @ 2024-08-03 3186/week @ 2024-08-10 1810/week @ 2024-08-17

9,730 每月下载量

MIT/Apache

25KB
371

cargo run-wasm

Crates.io Docs dependency status

允许以最简单的方式运行 wasm 应用程序和示例

cargo run-wasm --example example_name

cargo run-wasm --package crate_name

cargo run-wasm --bin bin_name

在后台,它

  1. 将 Rust 项目编译为 wasm
  2. 运行 wasm-bindgen
  3. 生成运行 wasm 的 index.html
  4. 启动一个微型的 web 服务器以提供 index.html + 你的 wasm

设置

  1. 将你的 wasm 可运行项目设置为 cargo 工作空间中的一个 crate
  2. 在 workspace 中创建一个名为 run-wasm 的 crate,使用

Cargo.toml:

[package]
name = "run-wasm"
version = "0.1.0"
edition = "2021"

[dependencies]
cargo-run-wasm = "0.3.0"

main.rs:

fn main() {
    cargo_run_wasm::run_wasm_cli_with_css("body { margin: 0px; }");
}
  1. 创建一个 .cargo/config 文件,包含
[alias]
run-wasm = "run --release --package run-wasm --"
  1. 就是这样,你现在可以运行前面描述的命令。您还可以运行 cargo run-wasm --help 以查看所有可能的标志。

注意:如果您想避免将项目重构为正确的工作空间,您可以通过将 workspace 和 crate 的 Cargo.toml 合并到单个文件中来实现,例如 winit 所做的那样

相对于等效的 bash/powershell/bat 脚本的优点

  • 跨平台
  • 0 个外部依赖项
  • 更好的 UX + 比用 bash/powershell/bat 拼接的任何东西都更稳健
  • 由于在同一个工作空间中,因此 wasm-bindgen-cli 版本始终与 wasm-bindgen 版本同步,因为 cargo update 会同时更新它们

cargo 自定义命令

cargo-run-wasm 不是一个 cargo 自定义命令,因为这会导致

  • 不同 wasm-bindgen 版本之间的不匹配问题
  • 与 wasm 应用保持稳定接口的问题
  • 给人一种命令与每个使用 wasm 的项目兼容的印象,但这并不是事实。

配置

如果您想设置自定义 css,请在 run_wasm_cli_with_css 的字符串参数中设置。

但是,从 cargo-run-wasm 中设置自定义 HTML 是不可能的,相反,您需要的任何 DOM 元素都应该在您的 crate 或示例中使用 web-sys 或另一个 crate 内部创建。原因在于,如果示例需要自定义 HTML,它可能

  • 需要唯一的 HTML,而 cargo-run-wasm 只能进行全局设置
  • 需要在运行时与 DOM 交互,因此需要 web-sys 或类似工具

MSRV

由于此工具的实现非常简单,MSRV 为 1.70,除非依赖项需要,否则不会增加。如果它被提高,它必须低于重要用户维护分支的 MSRV,例如 wgpuwinit

MSRV 通过 rust-toolchain.toml 文件在 CI 和本地强制执行。

替代方案

  • wasm-server-runner
    • 优点
      • 更好地与 cargo 集成
      • 不需要任何设置即可在项目中使用
    • 缺点
      • 需要用户运行 cargo install wasm-server-runner
      • wasm-bindgen 版本可能不同步,导致问题 如这个

许可协议

许可协议为以下之一

任选其一。

依赖项

~9–18MB
~283K SLoC