這是 wasm-pack未發布文件,已發布的文件可在 Rust 和 WebAssembly 主要文件網站 上找到。 此處記錄的功能可能無法在 wasm-pack 的發行版本中使用。

src/utils.rs

utils.rs 的目的是定義 utils 模組,其中包含一個函式 set_panic_hook。 如上一節所述,此函式將成為 lib.rsutils 模組的一部分。

如果未啟用 console_error_panic_hook 功能,則 set_panic_hook 被定義為一個內聯的空函式。 因此,它的使用不會造成執行時間效能或程式碼大小的負擔。

我們將討論

  1. 定義 set_panic_hook
  2. 什麼是 console_error_panic_hook

1. 定義 set_panic_hook

#![allow(unused)]
fn main() {
pub fn set_panic_hook() {
    // When the `console_error_panic_hook` feature is enabled, we can call the
    // `set_panic_hook` function at least once during initialization, and then
    // we will get better error messages if our code ever panics.
    //
    // For more details see
    // https://github.com/rustwasm/console_error_panic_hook#readme
    #[cfg(feature = "console_error_panic_hook")]
    console_error_panic_hook::set_once();
}
}

在這裡,我們定義了一個以 cfg 屬性開頭的函式。 這個屬性 #[cfg(feature = "console_error_panic_hook")] 告訴 Rust 在編譯時檢查是否設定了 console_error_panic_hook 功能。 如果設定了,它就會呼叫這個函式。 如果沒有設定 - 它就不會呼叫!

2. 什麼是 console_error_panic_hook

crate console_error_panic_hook 允許在網路瀏覽器中除錯 Rust 恐慌訊息,讓除錯 WebAssembly 程式碼變得更容易。

讓我們比較一下在啟用該功能前後,Rust 程式碼發生恐慌時會發生什麼

之前: "RuntimeError: Unreachable executed"

之後: "panicked at 'index out of bounds: the len is 3 but the index is 4', libcore/slice/mod.rs:2046:10"

為此,配置了一個 恐慌鉤子 (panic hook),它透過 JavaScript 的 console.error 函式將恐慌訊息記錄到開發者控制台。

但請注意,console_error_panic_hook 並非完全自動化的,因此您需要確保在任何程式碼執行之前呼叫 utils::set_panic_hook()(並且多次執行 set_panic_hook 是安全的)。

有關更多詳細資訊,請參閱 console_error_panic_hook 儲存庫