Cargo.toml
Cargo.toml
是 Rust 套件管理器 cargo
的設定檔。這個檔案包含套件的後設資料,例如名稱、版本和相依性,在 Rust 中套件稱為「crates」。
範本提供許多後設資料,但有三個關鍵部分需要討論
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_alloc
、console_error_panic_hook
相依性
為了設計一個範本,幫助人們發現對其特定使用案例有用的 crate,此範本包含兩個對開發 Rust-wasm
crate 的人非常有用的相依性: console_error_panic_hook
和 wee_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_hook
和 wee_alloc
。預設情況下,僅啟用 console_error_panic_hook
。若要停用或啟用任一功能,預設情況下,我們可以編輯 [features]
下的 default
向量。
若要深入瞭解這些功能,我們會在 src/lib.rs
和 src/utils.rs
部分詳細討論它們。
簡而言之,它們包含
- console_error_panic_hook 用於將 panic 訊息記錄到開發人員主控台。
- wee_alloc,一種針對小程式碼大小最佳化的配置器。