天天看點

[翻譯]Hello, wasm-pack - cargo.toml

Cargo.toml

cargo.toml

是Rust 包管理器

cargo

的清單檔案。這個檔案包

name

version

和包的依賴,在 Rust 中,我們一般稱之為

crate

在示例中給出了一系列資訊,但是我們主要讨論如下三點:

  • crate-type

  • wasm-bindgen

    依賴
  • [features]

    wee_alloc

    console_error_panic_hook

1.

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,一個使代碼量更小而優化的配置設定器。