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 crates,您會記得最常見的 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
相依性
作為我們設計範本以幫助人們發現對其特定用例有用的 crates 的一部分,此範本包含兩個對於開發 Rust-wasm
crates 的人非常有用的相依性: 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,一種針對小型程式碼大小最佳化的配置器。