你应该知道的工具
这是一个精选的工具列表,你在进行 Rust 和 WebAssembly 开发时应该了解这些工具。
开发、构建和工作流编排
wasm-pack
| 仓库
wasm-pack
旨在成为构建和使用 Rust 生成的 WebAssembly 的一站式商店,你希望在 Web 或 Node.js 上与 JavaScript 交互。wasm-pack
帮助你构建和发布 Rust 生成的 WebAssembly 到 npm 注册表,以便与你已使用的任何其他 JavaScript 包一起使用,在你的工作流程中使用。
优化和操作 .wasm
二进制文件
wasm-opt
| 仓库
wasm-opt
工具读取 WebAssembly 作为输入,对其运行转换、优化和/或检测传递,然后输出转换后的 WebAssembly。在通过 rustc
由 LLVM 生成的 .wasm
二进制文件上运行它通常会创建更小且执行速度更快的 .wasm
二进制文件。此工具是 binaryen
项目的一部分。
wasm2js
| 仓库
wasm2js
工具将 WebAssembly 编译成“几乎是 asm.js”。这对于支持没有 WebAssembly 实现的浏览器非常有用,例如 Internet Explorer 11。此工具是 binaryen
项目的一部分。
wasm-gc
| 仓库
一个用于垃圾收集 WebAssembly 模块并删除所有不需要的导出、导入、函数等的工具。这实际上是 WebAssembly 的 --gc-sections
链接器标志。
你通常不需要自己使用此工具,因为有两个原因
rustc
现在拥有一个足够新的lld
版本,它支持 WebAssembly 的--gc-sections
标志。这在 LTO 构建中自动启用。wasm-bindgen
CLI 工具会自动为你运行wasm-gc
。
wasm-snip
| 仓库
wasm-snip
将 WebAssembly 函数的主体替换为 unreachable
指令。
也许你知道某些函数在运行时永远不会被调用,但编译器在编译时无法证明这一点?剪掉它!然后再次运行 wasm-gc
,所有它传递调用(在运行时也可能永远不会被调用)的函数也会被删除。
这对于在非调试生产构建中强制删除 Rust 的恐慌基础设施很有用。
检查 .wasm
二进制文件
twiggy
| 仓库
twiggy
是一个用于 .wasm
二进制文件的代码大小分析器。它分析二进制文件的调用图以回答以下问题
- 为什么这个函数被包含在二进制文件中?即哪些导出的函数传递调用它?
- 这个函数的保留大小是多少?即如果我删除它以及删除它后变成死代码的所有函数,可以节省多少空间。
使用 twiggy
使你的二进制文件更精简!
wasm-objdump
| 仓库
打印有关 .wasm
二进制文件及其每个部分的低级详细信息。还支持反汇编成 WAT 文本格式。它就像 objdump
,但用于 WebAssembly。这是 WABT 项目的一部分。
wasm-nm
| 仓库
列出 .wasm
二进制文件中定义的导入、导出和私有函数符号。它就像 nm
,但用于 WebAssembly。