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

wasm-pack build

wasm-pack build 命令會建立 JavaScript 互通操作和將套件發布到 npm 所需的檔案。這涉及將您的程式碼編譯成 wasm 並產生一個 pkg 資料夾。此 pkg 資料夾將包含 wasm 二進位檔、一個 JS 包裝器檔案、您的 README 和一個 package.json 檔案。

預設情況下,pkg 目錄會自動被 .gitignore 忽略,因為它包含不打算簽入版本控制的建置成品。0

路徑

wasm-pack build 命令可以給予一個可選的路徑參數,例如

wasm-pack build examples/js-hello-world

此路徑應指向包含 Cargo.toml 檔案的目錄。如果未提供路徑,則 build 命令將在目前目錄中執行。

輸出目錄

預設情況下,wasm-pack 將會產生一個名為 pkg 的目錄來存放其建置輸出。如果您想要自訂此目錄,可以使用 --out-dir 旗標。

wasm-pack build --out-dir out

上述命令會將您的建置成品放在名為 out 的目錄中,而不是預設的 pkg

產生的檔案名稱

旗標 --out-name 設定輸出檔案名稱的前綴。如果未提供,則會使用套件名稱。

使用範例,假設我們的 crate 名稱為 dom

wasm-pack build
# will produce files
# dom.d.ts  dom.js  dom_bg.d.ts  dom_bg.wasm  package.json  README.md

wasm-pack build --out-name index
# will produce files
# index.d.ts  index.js  index_bg.d.ts  index_bg.wasm  package.json  README.md

設定檔

build 命令接受一個可選的設定檔參數:--dev--profiling--release 其中之一。如果未提供任何參數,則會使用 --release

這會控制是否啟用偵錯斷言、是否產生偵錯資訊,以及啟用哪些(如果有)最佳化。

設定檔偵錯斷言偵錯資訊最佳化注意事項
--dev適用於開發和偵錯。
--profiling適用於分析和調查效能問題。
--release適用於發布到生產環境。

--dev 設定檔將使用 cargo 的預設非發行設定檔建置輸出套件。以這種方式建置速度更快,但對輸出的最佳化較少,並啟用偵錯斷言和其他執行階段正確性檢查。--profiling--release 設定檔使用 cargo 的發行設定檔,但前者也啟用偵錯資訊,這有助於在分析器中調查效能問題。

設定檔旗標的確切含義可能會隨著平台的成熟而演變。

目標

build 命令接受 --target 參數。這將會自訂發出的 JS 以及 WebAssembly 檔案的實例化和載入方式。有關此處各種策略的更多文件,請參閱關於使用已編譯輸出的文件

wasm-pack build --target nodejs
選項用法說明
未指定bundlerBundler輸出適合與 Webpack 等 Bundler 互通操作的 JS。您將 import JS,並且 module 鍵會在 package.json 中指定。預設為 sideEffects: false
nodejsNode.js輸出使用 CommonJS 模組的 JS,以便與 require 陳述式一起使用。package.json 中的 main 鍵。
web瀏覽器原生輸出可以在瀏覽器中作為 ES 模組原生匯入的 JS,但必須手動實例化和載入 WebAssembly。
no-modules瀏覽器原生web 相同,只是 JS 包含在頁面上並修改全域狀態,並且不支援與 web 一樣多的 wasm-bindgen 功能
denoDeno輸出可以在 deno 中作為 ES 模組原生匯入的 JS。

範圍

build 命令也接受一個可選的 --scope 參數。這將會設定您的套件名稱的範圍,如果您的套件名稱可能與公共登錄檔中的某些內容衝突,這會很有用。例如

wasm-pack build examples/js-hello-world --scope test

此命令將會為名為 @test/js-hello-world 的套件建立一個 package.json 檔案。有關範圍設定的更多資訊,您可以參考此處的 npm 文件。

模式

build 命令接受一個可選的 --mode 參數。

wasm-pack build examples/js-hello-world --mode no-install
選項說明
no-installwasm-pack build 會隱式地建立 wasm 繫結,而無需安裝 wasm-bindgen
normal使用已安裝的 wasm-bindgen 執行 no-install 的所有操作。

額外選項

即使 wasm-pack 不支援,build 命令也可以將額外選項直接傳遞給 cargo build。要使用它們,只需將額外參數新增到命令的最後,就像您對 cargo build 所做的那樣。例如,要使用 cargo 的離線功能建置先前的範例

wasm-pack build examples/js-hello-world --mode no-install -- --offline

0 如果您需要在 pkg 目錄和您的 NPM 套件中包含其他資源,我們打算很快為您的用例提供解決方案。