Cargo.toml

Cargo.toml 是 Rust 套件管理器 cargo 的設定檔。這個檔案包含套件的後設資料,例如名稱、版本和相依性,在 Rust 中套件稱為「crates」。

範本提供許多後設資料,但有三個關鍵部分需要討論

  1. crate-type
  2. wasm-bindgen 相依性
  3. [features]wee_allocconsole_error_panic_hook 相依性

1. crate-type

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

Rust 的 wasm crate 與一般的 crate 有點不同,因此,我們需要在 Cargo.toml 中註明這一點。

這個 [lib] 註釋在 Cargo 專案中通常不需要,如果您熟悉其他 Rust crate,您會記得最常見的 crate 類型是 rlib(預設)或 bin(用於二進制檔案,不需要 crate-type 註釋)。

這裡的 crate-type = ["cdylib"] 通常表示您希望編譯器建立一個動態系統函式庫,但對於 WebAssembly 目標,它僅表示「建立一個沒有 start 函式的 *.wasm 檔案」。在其他平台上,此輸出類型將在 Linux 上建立 *.so 檔案,在 macOS 上建立 *.dylib 檔案,在 Windows 上建立 *.dll 檔案。

我們還指定 crate-type = ["rlib"] 以確保我們的函式庫可以使用 wasm-pack test 進行單元測試(我們稍後會看到)。如果沒有這個,我們將無法測試我們的函式庫,因為 cdylib crate 類型與 wasm-pack 的單元測試樣式不相容。

您可以在這裡閱讀更多關於連結和 crate 類型的資訊。

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 相依性

為了設計一個範本,幫助人們發現對其特定使用案例有用的 crate,此範本包含兩個對開發 Rust-wasm crate 的人非常有用的相依性: console_error_panic_hookwee_alloc

由於這些相依性主要在 Rust-wasm crate 開發工作流程的特定部分中很有用,因此我們也設定了一些程式碼,允許我們將它們都包含為相依性,但也允許選擇性地包含它們。

[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 用於將 panic 訊息記錄到開發人員主控台。
  • wee_alloc,一種針對小程式碼大小最佳化的配置器。