jco
用於使用 WebAssembly 元件的 JavaScript 工具鏈
字節碼聯盟項目
Jco 提供了一個完全原生的 JS 工具鏈,用於在 JavaScript 中使用 WebAssembly 元件。
特點包括:
將 Wasm 組件二進位檔案「轉譯」為可以在任何 JS 環境中運行的 ES 模組。
Node.js 和瀏覽器中的 WASI Preview2 支援(實驗性)。
Wasm 工具幫助程式的元件構建,可用作庫或 CLI 命令以在本機 JS 環境中使用,以及透過 Binaryen 的元件最佳化幫助程式。
運行並提供像 Wasmtime 這樣的命令,作為命令和 HTTP 代理世界的 JS 實作。
「Componentize」指令可以輕鬆建立用 JavaScript 寫的元件(ComponentizeJS 的包裝)。
若要使用其他語言建立組件,請參閱 Rust 的 Cargo Component 專案和 Wit Bindgen 以了解各種來賓 Bindgen 說明程式。
npm 安裝@bytecodealliance/jco
Jco 可以用作庫導入,也可以透過jco
指令用作 CLI。
有關完整的使用範例,請參閱範例工作流程頁面。
用法:jco <指令> [選項] jco - WebAssembly JS 元件工具 JS 組件轉譯 Bindgen 和 Wasm 工具 選項: -V, --version 輸出版本號 -h, --help 顯示指令指令的幫助: componentize [options] <js-source> 從 JavaScript 模組建立元件 transpile [options] <component-path> 將 WebAssembly 元件轉換為 JS + core Wasm 以執行 JavaScript types [options] <wit-path> 為給定的 WIT 產生類型 run [options] <command> [args...] 執行 WASI 指令元件 serve [options] <server> [args...] 提供 WASI HTTP 元件 opt [options] <component-file> 最佳化 Wasm 元件,包括執行 wasm-opt Binaryen 最佳化 wit [選項] <元件路徑> 從 WebAssembly 元件中提取 WIT [wasm-tools 元件 wit] print [options] <input> 列印二進位檔案的 WebAssembly WAT 文字 [wasm-tools print] 元資料顯示 [選項] [模組] 提取 Wasm 二進位檔案的生產者元資料 [wasm-tools 元資料顯示] 元資料新增 [選項] [模組] 新增 Wasm 二進位檔案的生產者元資料 [wasm-tools 元資料新增] parse [options] <input> 將 Wasm 文字格式解析為二進位檔案 [wasm-tools parse] new [options] <core-module> 建立一個改編自元件核心 Wasm [wasm-tools 元件 new] 的 WebAssembly 元件 embed [options] [core-module] 將元件輸入部分嵌入到核心 Wasm 模組中 [wasm-tools component embed] help [command] 顯示指令的幫助
有關各個命令選項的協助,請使用jco <cmd> --help
。
有關更多背景和信息,請參閱轉換文件。
為了直接調用 Rust 中的轉譯,Jco 中使用的 bindgen 也可以在 crates.io 上作為 js-component-bindgen 獲得。
對於實作 WASI Command 世界的 Wasm 元件,提供了jco run
實用程式來在 Node.js 中執行這些應用程式。
jco run cowasy.component.wasm hello
使用 Preview2-shim WASI 實現,提供對底層系統原語的完全訪問,包括檔案系統和環境變數權限。
對於 HTTP Proxy 元件, jco serve
提供了 JS 伺服器實作:
jco serve --port 8080 server.wasm
Wasmtime 通常提供執行命令和代理世界的最高效能實作。這些實作方式相當適合需要 JS 虛擬化的情況,或是最方便的方法。
注意:
jco componentize
被認為是實驗性的,可能會進行重大更改,恕不另行通知。
若要組件化 JS 文件,請執行:
jco componentize app.js --wit wit -n world-name -o component.wasm
透過嵌入 Spidermonkey 引擎,從實現 WIT 世界定義的 JS 模組創建元件。
有關此過程的更多詳細信息,請參閱 ComponentizeJS。
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
將組件轉譯為 JS。
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
使用 Binaryen Wasm-opt 專案優化組件。
componentWit(component: Uint8Array, document?: string): string
從元件二進位檔案中提取 WIT 世界。
print(component: Uint8Array): string
列印組件二進位檔案的 WAT。
metadataShow(wasm: Uint8Array): Metadata
提取組件及其嵌套模組的生產者工具鏈元資料。
parse(wat: string): Uint8Array
解析元件 WAT 以輸出元件二進位。
componentNew(coreWasm: Uint8Array | null, adapters?: [String, Uint8Array][]): Uint8Array
“WIT Component”元件建立工具,可選擇提供一組命名適配器二進位。
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
「WIT Component」元件嵌入工具,用於將元件類型嵌入到核心二進位檔案中,作為元件產生的高階用例。
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
將新的生產者元資料新增至元件或核心 Wasm 二進位檔案。
請參閱 Jco 書中的貢獻章節。
該專案根據 Apache 2.0 許可證獲得許可,但 LLVM 例外。有關更多詳細信息,請參閱許可證。
除非您另有明確說明,否則您有意提交的包含在本項目中的任何貢獻(如 Apache-2.0 許可證中所定義)均應按上述方式獲得許可,無需任何附加條款或條件。