Cargo.toml
cargo.toml
是Rust 包管理器
cargo
的清單檔案。這個檔案包
name
、
version
和包的依賴,在 Rust 中,我們一般稱之為
crate
。
在示例中給出了一系列資訊,但是我們主要讨論如下三點:
-
crate-type
-
依賴wasm-bindgen
-
和[features]
wee_alloc
console_error_panic_hook
1. crate-type
crate-type
[lib]
crate-type = ["cdylib", "rlib"]
Rust-wasm
包與通常的
crate
有一點不同,作為 WebAssembly 項目, 我們需要在
cargo.toml
中加入該說明。
如果你熟悉其他的 Rust crate,那麼你肯定知道,大多的 crate 的類型是
rlib
(預設), 或者是二進制形式的
bin
(這種形式不需要
crate-type
注解), 并且
[lib]
注解在普通的
Cargo
項目中并不需要指定。
crate-type = ["cdylib"] 訓示你的工程将會被編譯為動态系統庫 [dynamic system library], 但是對于 WebAssembly,他将會編譯為一個沒有啟動函數的 .wasm 檔案,在 Linux 平台上,他将會建立.so 檔案,在macOS 上将會建立.dylib檔案,在 windows 平台上将會建立 *.dylib 檔案。
我們通常指定
crate-type = ["rlib"]
來確定我們的庫可以用 wasm-pack 來做單元測試(稍後會看到)。如果沒有這個配置,我們将不能測試我們的庫,因為 cdylib 包類型和 wasm-pack 的單元測試類型相沖突。
你可以使用此
連結擷取更多關于包類型的知識。
2. wasm-bindgen 依賴
wasm-bindgen 在WebAssembly 中是一個重要的依賴。 這個包允許我們使用
[wasm-bindgen]
為在 JavaScript 和 Rust 生成的 wasm 之間的代碼打标簽。以使我們使用它的屬性可以導入 JS 并且導出 Rust。
wasm-bindgen = "0.2"
當我們讨論 lib.rs 生成什麼内容的時候,将會看到更多關于怎麼使用這個庫。
如果你從 JavaScript 技術棧過來,你可能注意到了當我們添加依賴的時候并沒有加
^
或者
~
,看起來像是我們隻要
0.2
這個版本。然而,事實并非如此!在 Rust 裡,
^
是預設的,你可使用這個
檢視更多資訊
3. [features] 和 wee_alloc, console_error_panic_hook dependencies
作為我們設計模闆的工作的一部分,該模闆可幫助人們發現針對特定用例的有用包,該模闆包括兩個依賴項,這對于開發Rust-wasm包的人們可能非常有用:console_error_panic_hook 和 wee_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_hook 和 wee_alloc。預設情況下,僅啟用 console_error_panic_hook。要禁用或啟用任一功能,預設情況下,我們可以在 [features] 下編輯 default 數組。
要了解有關這些功能的更多資訊,我們将在 src/lib.rs 和 src/utils.rs 部分中深入讨論它們。
簡要地,它們包括:
- console_error_panic_hook ,用于将奔潰消息記錄到開發人員控制台的功能。
- wee_alloc,一個使代碼量更小而優化的配置設定器。