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,一个针对小代码大小优化的分配器。