jco
Cadena de herramientas de JavaScript para trabajar con componentes WebAssembly
Un proyecto de Bytecode Alliance
Jco proporciona una cadena de herramientas JS totalmente nativa para trabajar con componentes WebAssembly en JavaScript.
Las características incluyen:
"Transpilación" de archivos binarios de Wasm Component en módulos ES que pueden ejecutarse en cualquier entorno JS.
Soporte WASI Preview2 en Node.js y navegadores (experimental).
Compilaciones de componentes de los asistentes de Wasm Tools, disponibles para usar como biblioteca o comandos CLI para usar en entornos JS nativos, así como asistente de optimización para componentes a través de Binaryen.
Ejecute y proporcione comandos como Wasmtime, como implementaciones JS de los mundos Command y HTTP Proxy.
Comando "Componentize" para crear fácilmente componentes escritos en JavaScript (envoltorio de ComponentizeJS).
Para crear componentes en otros idiomas, consulte el proyecto Cargo Component para Rust y Wit Bindgen para obtener varios ayudantes de bindgen invitados.
instalación npm @bytecodealliance/jco
Jco se puede utilizar como importación de biblioteca o como CLI mediante el comando jco
.
Consulte la página de flujo de trabajo de ejemplo para ver un ejemplo de uso completo.
Uso: jco <comando> [opciones] jco - Herramientas de componentes WebAssembly JS Transpilación de componentes JS Bindgen & Wasm Tools para JS Opciones: -V, --version genera el número de versión -h, --help muestra ayuda para comandoComandos: componenteizar [opciones] <js-source> Crear un componente a partir de un módulo JavaScript transpilar [opciones] <ruta-componente> Transpilar un componente WebAssembly a JS + núcleo Wasm para ejecución de JavaScript tipos [opciones] <wit-path> Generar tipos para el WIT dado ejecutar [opciones] <comando> [args...] Ejecutar un componente de comando WASI servir [opciones] <servidor> [argumentos...] Servir un componente WASI HTTP opt [opciones] <archivo-componente> optimiza un componente Wasm, incluida la ejecución de optimizaciones binarias de wasm-opt ingenio [opciones] <ruta-componente> extraer el WIT de un componente WebAssembly [ingenio del componente wasm-tools] print [opciones] <entrada> imprime el texto WAT de WebAssembly para un archivo binario [wasm-tools print] metadata-show [opciones] [módulo] extrae los metadatos del productor para un binario Wasm [wasm-tools metadata show] agregar metadatos [opciones] [módulo] agregar metadatos del productor para un binario Wasm [agregar metadatos de herramientas wasm] parse [opciones] <entrada> analiza el formato de texto Wasm en un archivo binario [wasm-tools parse] nuevo [opciones] <módulo-núcleo> crear un componente WebAssembly adaptado de un componente central Wasm [componente wasm-tools nuevo] incrustar [opciones] [módulo principal] incrustar la sección de escritura de componentes en un módulo principal de Wasm [incrustar componente de herramientas wasm] ayuda [comando] mostrar ayuda para el comando
Para obtener ayuda con las opciones de comandos individuales, use jco <cmd> --help
.
Consulte los documentos de transpilación para obtener más antecedentes e información.
Para acceder directamente a la transpilación en Rust, el bindgen utilizado en Jco también está disponible en crates.io como js-component-bindgen.
Para los componentes de Wasm que implementan el mundo WASI Command, se proporciona una utilidad jco run
para ejecutar estas aplicaciones en Node.js.
jco run cowasy.component.wasm hello
Al utilizar la implementación WASI de vista previa2-shim, se proporciona acceso completo a las primitivas del sistema subyacente, incluidos los permisos de variables de entorno y del sistema de archivos.
Para los componentes de proxy HTTP, jco serve
proporciona una implementación de servidor JS:
jco serve --port 8080 server.wasm
Wasmtime generalmente proporciona la implementación de mayor rendimiento para ejecutar mundos de comandos y proxy. Estas implementaciones son más bien para cuando se requiere virtualización JS o el enfoque más conveniente.
Nota :
jco componentize
se considera experimental y se pueden realizar cambios importantes sin previo aviso.
Para componer un archivo JS, ejecute:
jco componentize app.js --wit wit -n world-name -o component.wasm
Crea un componente a partir de un módulo JS que implementa una definición del mundo WIT, mediante la incorporación de un motor Spidermonkey.
Consulte ComponentizeJS para obtener más detalles sobre este proceso.
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
Transpilar un componente a JS.
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
Optimice un componente con el proyecto Binaryen Wasm-opt.
componentWit(component: Uint8Array, document?: string): string
Extraiga el mundo WIT de un componente binario.
print(component: Uint8Array): string
Imprima el WAT para un componente binario.
metadataShow(wasm: Uint8Array): Metadata
Extraiga los metadatos de la cadena de herramientas del productor para un componente y sus módulos anidados.
parse(wat: string): Uint8Array
Analiza un componente WAT para generar un componente binario.
componentNew(coreWasm: Uint8Array | null, adapters?: [String, Uint8Array][]): Uint8Array
"WIT Component" Herramienta de creación de componentes, que opcionalmente proporciona un conjunto de archivos binarios de adaptadores con nombre.
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
"WIT Component" Herramienta de incrustación de componentes, para incrustar tipos de componentes en archivos binarios centrales, como un caso de uso avanzado de generación de componentes.
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
Agregue nuevos metadatos de productor a un componente o binario central de Wasm.
Consulte el capítulo de contribución del libro de Jco.
Este proyecto tiene la licencia Apache 2.0 con la excepción LLVM. Consulte LICENCIA para obtener más detalles.
A menos que indique explícitamente lo contrario, cualquier contribución enviada intencionalmente por usted para su inclusión en este proyecto, según se define en la licencia Apache-2.0, tendrá la licencia mencionada anteriormente, sin términos ni condiciones adicionales.