jco
WebAssembly コンポーネントを操作するための JavaScript ツールチェーン
バイトコード アライアンス プロジェクト
Jco は、JavaScript で WebAssembly コンポーネントを操作するための完全にネイティブな JS ツールチェーンを提供します。
特徴は次のとおりです。
Wasm コンポーネントのバイナリを、任意の JS 環境で実行できる ES モジュールに「トランスパイル」します。
Node.js およびブラウザーでの WASI Preview2 のサポート (実験的)。
Wasm Tools ヘルパーのコンポーネント ビルド。ネイティブ JS 環境で使用するライブラリまたは CLI コマンドとして使用できるほか、Binaryen を介したコンポーネントの最適化ヘルパーとしても使用できます。
Wasmtime などのコマンドを、コマンド ワールドと HTTP プロキシ ワールドの JS 実装として実行し、提供します。
JavaScriptで書かれたコンポーネント(ComponentizeJSのラッパー)を簡単に作成する「Componentize」コマンド。
他の言語でコンポーネントを作成する場合は、Rust の Cargo Component プロジェクトと、さまざまなゲスト Bindgen ヘルパーの Wit Bindgen を参照してください。
npm インストール @bytecodealliance/jco
Jco は、ライブラリ インポートとして、またはjco
コマンドを介した CLI として使用できます。
完全な使用例については、ワークフロー例のページを参照してください。
使用法: jco <コマンド> [オプション] jco - WebAssembly JS コンポーネント ツール JS コンポーネントのトランスパイル JS 用 Bindgen および Wasm ツール オプション: -V、--version バージョン番号を出力します -h、--help command コマンドのヘルプを表示します。 Componentize [options] <js-source> JavaScript モジュールからコンポーネントを作成します transpile [options] <component-path> WebAssembly コンポーネントを JavaScript 実行用の JS + コア Wasm にトランスパイルします。 types [options] <wit-path> 指定された WIT のタイプを生成します。 run [options] <command> [args...] WASI コマンドコンポーネントを実行します。 serve [options] <server> [args...] WASI HTTP コンポーネントを提供します opt [options] <component-file> は、wasm-opt バイナリ最適化の実行を含む、Wasm コンポーネントを最適化します。 wit [オプション] <コンポーネントパス> WebAssembly コンポーネントから WIT を抽出します [wasm-tools コンポーネント wit] print [options] <input> バイナリ ファイルの WebAssembly WAT テキストを出力します [wasm-tools print] metadata-show [オプション] [モジュール] Wasm バイナリのプロデューサー メタデータを抽出します [wasm-tools メタデータ ショー] metadata-add [オプション] [モジュール] Wasm バイナリのプロデューサー メタデータを追加 [wasm-tools メタデータの追加] parse [options] <input> Wasm テキスト形式をバイナリ ファイルに解析します [wasm-tools parse] new [オプション] <core-module> コンポーネント core Wasm から適応した WebAssembly コンポーネントを作成します [wasm-tools コンポーネント new] embed [options] [core-module] コンポーネントの型指定セクションをコア Wasm モジュールに埋め込みます [wasm-tools コンポーネント embed] help [command] コマンドのヘルプを表示します
個々のコマンド オプションのヘルプについては、 jco <cmd> --help
を使用してください。
詳細な背景と情報については、トランスパイルのドキュメントを参照してください。
Rust でトランスパイルを直接呼び出すために、Jco で使用される bindinggen も js-component-bindgen として crates.io で入手できます。
WASI コマンドの世界を実装する Wasm コンポーネントの場合、これらのアプリケーションを Node.js で実行するためのjco run
ユーティリティが提供されます。
jco run cowasy.component.wasm hello
プレビュー 2-shim WASI 実装を使用すると、ファイル システムや環境変数のアクセス許可を含む、基盤となるシステム プリミティブへの完全なアクセスが提供されます。
HTTP プロキシ コンポーネントの場合、 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 }>
Binary 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 コンポーネント」 コンポーネント作成ツール。オプションで名前付きアダプター バイナリのセットを提供します。
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
「WIT コンポーネント」 コンポーネント生成の高度な使用例として、コンポーネント タイプをコア バイナリに埋め込むためのコンポーネント埋め込みツール。
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
新しいプロデューサーのメタデータをコンポーネントまたはコア Wasm バイナリに追加します。
JCO ブックの「貢献」の章を参照してください。
このプロジェクトは、LLVM の例外を除き、Apache 2.0 ライセンスに基づいてライセンスされています。詳細については、「ライセンス」を参照してください。
あなたが明示的に別段の定めをしない限り、Apache-2.0 ライセンスに定義されているように、あなたがこのプロジェクトに含めるために意図的に提出した貢献は、追加の条項や条件なしで上記のようにライセンスされるものとします。