这是 wasm-pack 的**未发布**文档,已发布的文档可在 Rust 和 WebAssembly 主文档网站上找到 。此处记录的功能可能在发布的 wasm-pack 版本中不可用。

Cargo.toml

Cargo.toml 是 Rust 包管理器 cargo 的清单文件。此文件包含包的元数据,例如名称、版本和依赖项,在 Rust 中称为“板条箱”。

模板为我们提供了大量元数据,但有三个关键部分需要讨论

  1. crate-type
  2. wasm-bindgen 依赖项
  3. [features]wee_allocconsole_error_panic_hook 依赖项

1. crate-type

[lib]
crate-type = ["cdylib", "rlib"]

Rust-wasm 板条箱与普通板条箱略有不同,因此我们需要在 Cargo.toml 中进行说明。

[lib] 注释通常在 Cargo 项目中不需要,如果您熟悉其他 Rust 板条箱,您会记得最常见的板条箱类型是 rlib(默认)或 bin 用于二进制文件(不需要 crate-type 注释)。

但是,这里 crate-type = ["cdylib"] 通常表示您希望编译器创建一个动态系统库,但对于 WebAssembly 目标,它只是意味着“创建一个没有 start 函数的 *.wasm 文件”。在其他平台上,此输出类型将在 Linux 上创建 *.so 文件,在 macOS 上创建 *.dylib 文件,在 Windows 上创建 *.dll 文件。

我们还指定 crate-type = ["rlib"] 以确保我们的库可以使用 wasm-pack test 进行单元测试(我们将在后面看到)。如果没有它,我们将无法测试我们的库,因为 cdylib 板条箱类型与 wasm-pack 的单元测试风格不兼容。

您可以阅读有关链接和板条箱类型的更多信息,此处

2. wasm-bindgen 依赖项

wasm-bindgen 是我们最重要的依赖项。此包允许我们使用 #[wasm-bindgen] 属性标记代表我们想要在 JavaScript 和 Rust 生成的 wasm 之间建立的接口的代码。我们可以使用此属性导入 JS 并导出 Rust。

wasm-bindgen = "0.2"

当我们讨论在 lib.rs 中生成的代码时,我们将更多地了解如何使用此库。

⚠️ 如果您来自 JavaScript,您可能会注意到,当我们添加依赖项时,没有 ^~ 符号 - 看起来我们正在锁定到 0.2 版本。但是,情况并非如此!在 Rust 中,^ 是隐含的。您可以在 cargo 文档中有关指定依赖项的信息 中了解更多信息。

3. [features]wee_allocconsole_error_panic_hook 依赖项

作为我们设计一个模板以帮助人们发现适合其特定用例的有用板条箱的努力的一部分,此模板包含两个对开发 Rust-wasm 板条箱的人员非常有用的依赖项: console_error_panic_hookwee_alloc

由于这些依赖项主要在 Rust-wasm 板条箱开发工作流程的特定部分中很有用,因此我们还设置了一些粘合代码,使我们能够将它们都包含为依赖项,但也允许它们被可选地包含。

[features]
default = ["console_error_panic_hook"]

[dependencies]
wasm-bindgen = "0.2"

# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
# code size when deploying.
console_error_panic_hook = { version = "0.1.1", optional = true }

# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size
# compared to the default allocator's ~10K. It is slower than the default
# allocator, however.
#
# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now.
wee_alloc = { version = "0.4.2", optional = true }

在我们的代码中,我们将某些代码部分标记为仅在启用某些 [features] 时运行,具体来说,是 console_error_panic_hookwee_alloc。默认情况下,仅启用 console_error_panic_hook。要禁用或启用任何功能,默认情况下,我们可以编辑 [features] 下的 default 向量。

要详细了解这些功能,我们将在 src/lib.rssrc/utils.rs 部分中深入讨论它们。

简而言之,它们包括

  • console_error_panic_hook 用于将恐慌消息记录到开发者控制台。
  • wee_alloc,一个针对小代码大小优化的分配器。