非 Rustup 安裝

wasm-pack 使用 wasm32-unknown-unknown 目標編譯您的程式碼。如果您尚未安裝此目標,wasm-pack 將會在 Rustup 安裝中自動新增,方法是執行 rustup target add wasm32-unknown-unknown。但是,如果您未使用 Rustup,則我們將無法自動執行此操作,您必須自行執行。

手動新增 wasm32-unknown-unknown

免責聲明:這並不能保證適用於所有設定。以下說明僅適用於與確切 rustc 版本相符的設定,這表示下載的 wasm32 目標可能不相容。

若要手動新增 wasm32-unknown-unknown 目標,您需要從 rust-lang 網站下載它,並將內容放在正確的資料夾中。

目前網站上尚未以人性化的方式呈現所有不同 rustc 版本的所有目標,讓您可以直接選擇並下載所需目標,原因之一是 Rustup 會為您處理所有這些操作,目標的打包主要是為了工具而建構。但是,以下步驟將逐步說明如何執行此操作。

首先,透過執行 rustc --version 來檢查您正在使用的 rustc 版本。這應該會顯示類似以下內容:rustc 1.33.0 (2aa4c46cf 2019-02-28)。然後,您需要下載適用於您的 rustc 版本的正確 wasm32 目標。rustc 版本是網址的一部分,這表示對於 rustc 1.33.0,網址看起來像這樣:https://static.rust-lang.org/dist/rust-std-1.33.0-wasm32-unknown-unknown.tar.gz

以下是一些不同 rustc 版本網址的範例

  • Nightly https://static.rust-lang.org/dist/rust-std-nightly-wasm32-unknown-unknown.tar.gz
  • 特定日期的 Nightly(2019-03-10)https://static.rust-lang.org/dist/2019-03-10/rust-std-nightly-wasm32-unknown-unknown.tar.gz
  • Beta https://static.rust-lang.org/dist/rust-std-beta-wasm32-unknown-unknown.tar.gz

您應該能夠透過執行 wget https://static.rust-lang.org/dist/rust-std-1.33.0-wasm32-unknown-unknown.tar.gz 或直接在網頁瀏覽器中造訪網址來下載此 tarball。

在您選擇的位置下載此 tarball 後,您應該將其解壓縮。這應該會產生一個名為 rust-std-1.33.0-wasm32-unknown-unknown 的資料夾,其中包含一些資料夾和檔案,但有趣的是一個名為 rust-std-wasm32-unknown-unknown 的資料夾,其中包含一個 lib,其中應該包含一個 rustlib 資料夾,其中有一個名為 wasm32-unknown-unknown 的資料夾。這是我們想要移動的資料夾。

以下是 rustc 1.33.0 的結構範例

rust-std-1.33.0-wasm32-unknown-unknown
├── components
├── install.sh
├── rust-installer-version
└── rust-std-wasm32-unknown-unknown
    ├── lib
    │   └── rustlib
    │       └── wasm32-unknown-unknown

若要瞭解我們應該將此 wasm32-unknown-unknown 資料夾移動到哪裡,我們需要執行 rustc --print sysroot,這應該會印出一個看起來像這樣的路徑(這在不同的作業系統上會有所不同):/home/user/rust/rust-1.33.0-2019-02-28-2aa4c46cf。該資料夾應該包含一個 lib 資料夾,其中包含一個 rustlib 資料夾。我們應該將 wasm32-unknown-unknown 移動到此資料夾。

在類 Unix 作業系統上,我們可以使用以下指令執行此操作:mv rust-std-1.33.0-wasm32-unknown-unknown/rust-std-wasm32-unknown-unknown/lib/rustlib/wasm32-unknown-unknown /home/user/rust/rust-1.33.0-2019-02-28-2aa4c46cf/lib/rustlib/,這樣就可以了!