jco
Conjunto de ferramentas JavaScript para trabalhar com componentes WebAssembly
Um projeto da Bytecode Alliance
Jco fornece um conjunto de ferramentas JS totalmente nativo para trabalhar com componentes WebAssembly em JavaScript.
Os recursos incluem:
"Transpilando" binários do componente Wasm em módulos ES que podem ser executados em qualquer ambiente JS.
Suporte WASI Preview2 em Node.js e navegadores (experimental).
Construções de componentes de auxiliares Wasm Tools, disponíveis para uso como uma biblioteca ou comandos CLI para uso em ambientes JS nativos, bem como auxiliar de otimização para componentes via Binaryen.
Execute e sirva comandos como Wasmtime, como implementações JS dos mundos Command e HTTP Proxy.
Comando "Componentize" para criar facilmente componentes escritos em JavaScript (wrapper do ComponentizeJS).
Para criar componentes em outras linguagens, consulte o projeto Cargo Component para Rust e Wit Bindgen para vários auxiliares convidados do bindgen.
npm instalar @bytecodealliance/jco
Jco pode ser usado como uma importação de biblioteca ou como CLI por meio do comando jco
.
Consulte a página Exemplo de fluxo de trabalho para obter um exemplo completo de uso.
Uso: jco <comando> [opções] jco - Ferramentas de componentes WebAssembly JS Ferramentas Bindgen e Wasm de transpilação de componentes JS para JS Opções: -V, --version exibe o número da versão -h, --help exibe ajuda para comandos: componentize [options] <js-source> Crie um componente a partir de um módulo JavaScript transpilar [opções] <component-path> Transpilar um componente WebAssembly para JS + core Wasm para execução de JavaScript tipos [opções] <wit-path> Gera tipos para o WIT fornecido execute [options] <command> [args...] Execute um componente de comando WASI serve [options] <server> [args...] Serve um componente WASI HTTP opt [options] <component-file> otimiza um componente Wasm, incluindo a execução de otimizações binárias wasm-opt sagacidade [opções] <caminho do componente> extrair o WIT de um componente WebAssembly [componente wasm-tools sagacidade] imprimir [opções] <input> imprimir o texto WAT do WebAssembly para um arquivo binário [wasm-tools print] metadata-show [opções] [módulo] extrai os metadados do produtor para um binário Wasm [wasm-tools metadata show] metadata-add [opções] [módulo] adiciona metadados do produtor para um binário Wasm [wasm-tools metadata add] parse [options] <input> analisa o formato de texto Wasm em um arquivo binário [wasm-tools parse] new [options] <core-module> criar um componente WebAssembly adaptado de um componente core Wasm [wasm-tools component new] incorporar [opções] [módulo principal] incorporar a seção de digitação do componente em um módulo Wasm principal [incorporar componente do wasm-tools] ajuda [comando] exibir ajuda para o comando
Para obter ajuda com opções de comando individuais, use jco <cmd> --help
.
Consulte os documentos de Transpiling para obter mais informações e informações.
Para chamar diretamente a transpilação no Rust, o bindgen usado no Jco também está disponível em crates.io como js-component-bindgen.
Para componentes Wasm que implementam o mundo do comando WASI, um utilitário jco run
é fornecido para executar esses aplicativos em Node.js.
jco run cowasy.component.wasm hello
Usando a implementação WASI preview2-shim, é fornecido acesso total às primitivas do sistema subjacente, incluindo sistema de arquivos e permissões de variáveis de ambiente.
Para componentes do proxy HTTP, jco serve
fornece uma implementação de servidor JS:
jco serve --port 8080 server.wasm
Wasmtime geralmente fornece a implementação de melhor desempenho para a execução de mundos de comando e proxy a serem usados. Essas implementações são para quando a virtualização JS é necessária ou é a abordagem mais conveniente.
Nota :
jco componentize
é considerado experimental e alterações importantes podem ser feitas sem aviso prévio.
Para componenteizar um arquivo JS, execute:
jco componentize app.js --wit wit -n world-name -o component.wasm
Cria um componente a partir de um módulo JS implementando uma definição de mundo WIT, por meio de incorporação do mecanismo Spidermonkey.
Consulte ComponentizeJS para obter mais detalhes sobre este processo.
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
Transpile um componente para JS.
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
Otimize um componente com o projeto Binaryen Wasm-opt.
componentWit(component: Uint8Array, document?: string): string
Extraia o mundo WIT de um componente binário.
print(component: Uint8Array): string
Imprima o WAT para um binário de componente.
metadataShow(wasm: Uint8Array): Metadata
Extraia os metadados da cadeia de ferramentas do produtor para um componente e seus módulos aninhados.
parse(wat: string): Uint8Array
Analise um componente WAT para gerar um binário de componente.
componentNew(coreWasm: Uint8Array | null, adapters?: [String, Uint8Array][]): Uint8Array
Ferramenta de criação de componentes "WIT Component", fornecendo opcionalmente um conjunto de binários de adaptadores nomeados.
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
Ferramenta de incorporação de componentes "WIT Component", para incorporar tipos de componentes em binários principais, como um caso de uso avançado de geração de componentes.
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
Adicione novos metadados de produtor a um componente ou binário central do Wasm.
Veja o capítulo Contribuições do livro Jco.
Este projeto está licenciado sob a licença Apache 2.0 com exceção do LLVM. Consulte LICENÇA para obter mais detalhes.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão neste projeto por você, conforme definido na licença Apache-2.0, deverá ser licenciada conforme acima, sem quaisquer termos ou condições adicionais.