jco
Chaîne d'outils JavaScript pour travailler avec les composants WebAssembly
Un projet Bytecode Alliance
Jco fournit une chaîne d'outils JS entièrement native pour travailler avec les composants WebAssembly en JavaScript.
Les fonctionnalités incluent :
"Transpiler" les binaires des composants Wasm dans des modules ES pouvant s'exécuter dans n'importe quel environnement JS.
Prise en charge de WASI Preview2 dans Node.js et navigateurs (expérimental).
Constructions de composants d'assistants Wasm Tools, disponibles pour une utilisation en tant que bibliothèque ou commandes CLI à utiliser dans des environnements JS natifs, ainsi qu'assistant d'optimisation pour les composants via Binaryen.
Exécutez et servez des commandes comme Wasmtime, en tant qu'implémentations JS des mondes Command et HTTP Proxy.
Commande "Componentize" pour créer facilement des composants écrits en JavaScript (wrapper de ComponentizeJS).
Pour créer des composants dans d'autres langages, consultez le projet Cargo Component pour Rust et Wit Bindgen pour divers assistants bindgen invités.
npm installer @bytecodealliance/jco
Jco peut être utilisé soit comme importation de bibliothèque, soit comme CLI via la commande jco
.
Consultez la page Exemple de flux de travail pour un exemple d'utilisation complet.
Utilisation : jco <commande> [options] jco - Outils de composants WebAssembly JS Transpilation de composants JS Outils Bindgen et Wasm pour JS Possibilités : -V, --version affiche le numéro de version -h, --help affiche l'aide pour les commandes command : Componentize [options] <js-source> Créer un composant à partir d'un module JavaScript transpile [options] <component-path> Transpiler un composant WebAssembly vers JS + core Wasm pour l'exécution de JavaScript types [options] <wit-path> Générer des types pour le WIT donné run [options] <command> [args...] Exécuter un composant de commande WASI serve [options] <server> [args...] Servir un composant HTTP WASI opt [options] <component-file> optimise un composant Wasm, y compris l'exécution des optimisations wasm-opt Binaryen wit [options] <component-path> extraire le WIT d'un composant WebAssembly [composant wasm-tools wit] print [options] <input> imprimer le texte WebAssembly WAT pour un fichier binaire [wasm-tools print] metadata-show [options] [module] extraire les métadonnées du producteur pour un binaire Wasm [wasm-tools metadata show] metadata-add [options] [module] ajouter des métadonnées de producteur pour un binaire Wasm [wasm-tools metadata add] parse [options] <input> analyse le format de texte Wasm dans un fichier binaire [wasm-tools parse] new [options] <core-module> créer un composant WebAssembly adapté d'un composant core Wasm [wasm-tools composant nouveau] embed [options] [core-module] intégrer la section de saisie du composant dans un module Wasm principal [wasm-tools composant embed] help [command] afficher l'aide pour la commande
Pour obtenir de l'aide sur les options de commande individuelles, utilisez jco <cmd> --help
.
Voir les documents Transpiling pour plus d'informations et d'informations.
Pour appeler directement la transpilation dans Rust, le bindgen utilisé dans Jco est également disponible sur crates.io sous le nom js-component-bindgen.
Pour les composants Wasm qui implémentent le monde WASI Command, un utilitaire jco run
est fourni pour exécuter ces applications dans Node.js.
jco run cowasy.component.wasm hello
Grâce à l'implémentation WASI preview2-shim, un accès complet aux primitives du système sous-jacent est fourni, y compris les autorisations du système de fichiers et des variables d'environnement.
Pour les composants proxy HTTP, jco serve
fournit une implémentation de serveur JS :
jco serve --port 8080 server.wasm
Wasmtime fournit généralement l'implémentation la plus performante pour l'exécution des mondes de commandes et proxy à utiliser. Ces implémentations sont plutôt destinées lorsque la virtualisation JS est requise ou constituent l'approche la plus pratique.
Remarque :
jco componentize
est considéré comme expérimental et des modifications importantes peuvent être apportées sans préavis.
Pour composer un fichier JS, exécutez :
jco componentize app.js --wit wit -n world-name -o component.wasm
Crée un composant à partir d'un module JS implémentant une définition du monde WIT, via une intégration de moteur Spidermonkey.
Voir ComponentizeJS pour plus de détails sur ce processus.
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
Transpilez un composant vers JS.
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
Optimisez un composant avec le projet Binaryen Wasm-opt.
componentWit(component: Uint8Array, document?: string): string
Extrayez le monde WIT à partir d'un composant binaire.
print(component: Uint8Array): string
Imprimez le WAT pour un binaire de composant.
metadataShow(wasm: Uint8Array): Metadata
Extrayez les métadonnées de la chaîne d'outils du producteur pour un composant et ses modules imbriqués.
parse(wat: string): Uint8Array
Analysez un composant WAT pour générer un binaire de composant.
componentNew(coreWasm: Uint8Array | null, adapters?: [String, Uint8Array][]): Uint8Array
"WIT Component" Outil de création de composants, fournissant éventuellement un ensemble de binaires d'adaptateur nommés.
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
"WIT Component" Outil d'intégration de composants, pour intégrer des types de composants dans les binaires principaux, en tant que cas d'utilisation avancé de génération de composants.
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
Ajoutez de nouvelles métadonnées de producteur à un composant ou à un binaire Wasm principal.
Voir le chapitre Contributif du livre Jco.
Ce projet est sous licence Apache 2.0 à l'exception de LLVM. Voir LICENCE pour plus de détails.
Sauf indication contraire explicite de votre part, toute contribution que vous soumettez intentionnellement pour inclusion dans ce projet, telle que définie dans la licence Apache-2.0, sera sous licence comme ci-dessus, sans termes ou conditions supplémentaires.