jco
JavaScript-Toolchain für die Arbeit mit WebAssembly-Komponenten
Ein Projekt der Bytecode Alliance
Jco bietet eine vollständig native JS-Toolchain für die Arbeit mit WebAssembly-Komponenten in JavaScript.
Zu den Funktionen gehören:
„Transpilieren“ von Wasm-Komponenten-Binärdateien in ES-Module, die in jeder JS-Umgebung ausgeführt werden können.
WASI Preview2-Unterstützung in Node.js und Browsern (experimentell).
Komponenten-Builds von Wasm Tools-Helfern, verfügbar als Bibliothek oder CLI-Befehle zur Verwendung in nativen JS-Umgebungen, sowie Optimierungshelfer für Komponenten über Binaryen.
Führen Sie Befehle wie Wasmtime aus und stellen Sie sie als JS-Implementierungen der Befehls- und HTTP-Proxy-Welten bereit.
„Componentize“-Befehl zum einfachen Erstellen von in JavaScript geschriebenen Komponenten (Wrapper von ComponentizeJS).
Informationen zum Erstellen von Komponenten in anderen Sprachen finden Sie im Cargo Component-Projekt für Rust und Wit Bindgen für verschiedene Gast-Bindgen-Helfer.
npm install @bytecodealliance/jco
Jco kann entweder als Bibliotheksimport oder als CLI über den Befehl jco
verwendet werden.
Ein vollständiges Anwendungsbeispiel finden Sie auf der Seite „Beispiel-Workflow“.
Verwendung: jco <Befehl> [Optionen] jco – WebAssembly JS-Komponententools JS Component Transpilation Bindgen & Wasm Tools für JS Optionen: -V, --version gibt die Versionsnummer aus -h, --help zeigt Hilfe für Befehlsbefehle an: Componentize [Optionen] <js-source> Erstellt eine Komponente aus einem JavaScript-Modul transpile [Optionen] <Komponentenpfad> Transpilieren Sie eine WebAssembly-Komponente in JS + Core Wasm für die JavaScript-Ausführung Typen [Optionen] <wit-path> Generieren Sie Typen für das angegebene WIT run [Optionen] <Befehl> [Argumente...] Führen Sie eine WASI-Befehlskomponente aus Serve [Optionen] <Server> [Argumente...] Stellt eine WASI-HTTP-Komponente bereit opt [Optionen] <Komponentendatei> optimiert eine Wasm-Komponente, einschließlich der Ausführung von wasm-opt Binaryen-Optimierungen wit [Optionen] <Komponentenpfad> Extrahieren Sie das WIT aus einer WebAssembly-Komponente [wasm-tools-Komponente wit] print [Optionen] <Eingabe> druckt den WebAssembly-WAT-Text für eine Binärdatei [wasm-tools print] metadata-show [Optionen] [Modul] Extrahieren Sie die Producer-Metadaten für eine Wasm-Binärdatei [wasm-tools metadata show] metadata-add [Optionen] [Modul] Producer-Metadaten für eine Wasm-Binärdatei hinzufügen [wasm-tools metadata add] parse [Optionen] <Eingabe> analysiert das Wasm-Textformat in eine Binärdatei [wasm-tools parse] new [Optionen] <core-module> erstellt eine WebAssembly-Komponente, die von einem Komponentenkern-Wasm angepasst wurde [wasm-tools-Komponente neu] Einbetten [Optionen] [Kernmodul] Einbetten des Komponententypisierungsabschnitts in ein Kern-Wasm-Modul [Wasm-Tools-Komponenteneinbettung] Hilfe [Befehl] Anzeigen der Hilfe für den Befehl
Für Hilfe zu einzelnen Befehlsoptionen verwenden Sie jco <cmd> --help
.
Weitere Hintergrundinformationen und Informationen finden Sie in den Transpiling-Dokumenten.
Um die Transpilation in Rust direkt aufzurufen, ist das in Jco verwendete Bindgen auch auf crates.io als js-component-bindgen verfügbar.
Für Wasm-Komponenten, die die WASI-Befehlswelt implementieren, wird ein jco run
-Dienstprogramm bereitgestellt, um diese Anwendungen in Node.js auszuführen.
jco run cowasy.component.wasm hello
Mithilfe der WASI-Implementierung „preview2-shim“ wird vollständiger Zugriff auf die zugrunde liegenden Systemprimitive bereitgestellt, einschließlich Dateisystem- und Umgebungsvariablenberechtigungen.
Für HTTP-Proxy-Komponenten stellt jco serve
eine JS-Serverimplementierung bereit:
jco serve --port 8080 server.wasm
Wasmtime bietet im Allgemeinen die leistungsstärkste Implementierung zum Ausführen von Befehls- und Proxy-Welten. Diese Implementierungen sind eher für den Fall gedacht, dass JS-Virtualisierung erforderlich ist oder der bequemste Ansatz ist.
Hinweis :
jco componentize
gilt als experimentell und wichtige Änderungen können ohne Vorankündigung vorgenommen werden.
Um eine JS-Datei in Komponenten zu zerlegen, führen Sie Folgendes aus:
jco componentize app.js --wit wit -n world-name -o component.wasm
Erstellt eine Komponente aus einem JS-Modul, das eine WIT-Weltdefinition über eine Spidermonkey-Engine-Einbettung implementiert.
Weitere Details zu diesem Prozess finden Sie unter ComponentizeJS.
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
Transpilieren Sie eine Komponente nach JS.
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
Optimieren Sie eine Komponente mit dem Binaryen Wasm-opt-Projekt.
componentWit(component: Uint8Array, document?: string): string
Extrahieren Sie die WIT-Welt aus einer Komponentenbinärdatei.
print(component: Uint8Array): string
Drucken Sie den WAT für eine Komponentenbinärdatei aus.
metadataShow(wasm: Uint8Array): Metadata
Extrahieren Sie die Metadaten der Producer-Toolchain für eine Komponente und ihre verschachtelten Module.
parse(wat: string): Uint8Array
Analysieren Sie eine Komponenten-WAT, um eine Komponenten-Binärdatei auszugeben.
componentNew(coreWasm: Uint8Array | null, adapters?: [String, Uint8Array][]): Uint8Array
„WIT-Komponente“ Komponentenerstellungstool, das optional einen Satz benannter Adapter-Binärdateien bereitstellt.
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
„WIT Component“ Komponenteneinbettungstool zum Einbetten von Komponententypen in Kernbinärdateien als erweiterter Anwendungsfall der Komponentengenerierung.
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
Fügen Sie einer Komponente oder Kern-Wasm-Binärdatei neue Producer-Metadaten hinzu.
Siehe das Kapitel „Mitwirken“ im Jco-Buch.
Dieses Projekt ist unter der Apache 2.0-Lizenz mit der LLVM-Ausnahme lizenziert. Weitere Einzelheiten finden Sie unter LIZENZ.
Sofern Sie nicht ausdrücklich etwas anderes angeben, wird jeder von Ihnen absichtlich zur Aufnahme in dieses Projekt eingereichte Beitrag gemäß der Definition in der Apache-2.0-Lizenz wie oben ohne zusätzliche Bedingungen lizenziert.