jco
Набор инструментов JavaScript для работы с компонентами WebAssembly.
Проект Альянса Байткода
Jco предоставляет полностью встроенный набор инструментов JS для работы с компонентами WebAssembly в JavaScript.
Особенности включают в себя:
«Транспилирование» двоичных файлов компонентов Wasm в модули ES, которые могут работать в любой среде JS.
Поддержка WASI Preview2 в Node.js и браузерах (экспериментальная).
Сборки компонентов помощников Wasm Tools, доступных для использования в виде библиотеки или команд CLI для использования в собственных средах JS, а также помощника по оптимизации для компонентов через Binaryen.
Запускайте и обслуживайте команды, такие как Wasmtime, как JS-реализации мира команд и HTTP-прокси.
Команда «Компонентизация» для простого создания компонентов, написанных на JavaScript (обертка ComponentizeJS).
Для создания компонентов на других языках см. проект Cargo Component для Rust и Wit Bindgen, где представлены различные гостевые помощники по привязке.
npm установить @bytecodealliance/jco
Jco можно использовать либо как импорт библиотеки, либо как CLI с помощью команды jco
.
Полный пример использования см. на странице «Пример рабочего процесса».
Использование: jco <команда> [опции] jco — Инструменты для компонентов JS WebAssembly Транспиляция JS-компонентов Инструменты Bindgen и Wasm для JS Параметры: -V, --version вывести номер версии -h, --help отобразить справку по командам: компонентизация [опции] <js-source> Создать компонент из модуля JavaScript transpile [options] <comComponent-path> Транспилировать компонент WebAssembly в JS + ядро Wasm для выполнения JavaScript типы [опции] <wit-path> Генерировать типы для данного WIT run [options] <command> [args...] Запустить компонент команды WASI служить [опции] <сервер> [аргументы...] Обслуживать HTTP-компонент WASI opt [options] <comment-file> оптимизирует компонент Wasm, включая запуск оптимизации wasm-opt Binaryen. wit [параметры] <путь к компоненту> извлекает WIT из компонента WebAssembly [компонент wasm-tools wit] print [options] <input> распечатать WAT-текст WebAssembly для двоичного файла [wasm-tools print] Metadata-show [опции] [модуль] извлекает метаданные производителя для двоичного файла Wasm [показ метаданных Wasm-tools] Metadata-add [опции] [модуль] добавить метаданные производителя для двоичного файла Wasm [добавление метаданных Wasm-tools] parse [параметры] <input> анализирует текстовый формат Wasm в двоичный файл [анализ Wasm-tools] новый [опции] <core-module> создать компонент WebAssembly, адаптированный из ядра компонента Wasm [новый компонент wasm-tools] embed [options] [core-module] встроить раздел ввода компонента в основной модуль Wasm [wasm-tools компонент embed] help [command] отобразить справку по команде
Для получения справки по отдельным параметрам команды используйте jco <cmd> --help
.
Дополнительную информацию и информацию см. в документации по транспиляции.
Чтобы напрямую вызвать транспиляцию в Rust, привязка, используемая в Jco, также доступна на crates.io как js-comComponent-bindgen.
Для компонентов Wasm, реализующих мир команд WASI, предоставляется утилита jco run
для запуска этих приложений в Node.js.
jco run cowasy.component.wasm hello
Используя реализацию WASIview2-shim, обеспечивается полный доступ к базовым системным примитивам, включая разрешения для файловой системы и переменных среды.
Для компонентов 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
Создает компонент из модуля JS, реализующего определение мира WIT, посредством внедрения движка Spidermonkey.
См. ComponentizeJS для получения более подробной информации об этом процессе.
transpile(component: Uint8Array, opts?): Promise<{ files: Record<string, Uint8Array> }>
Транспилируйте компонент в JS.
opt(component: Uint8Array, opts?): Promise<{ component: Uint8Array }>
Оптимизируйте компонент с помощью проекта Binaryen 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 Component» Инструмент создания компонентов, дополнительно предоставляющий набор именованных двоичных файлов адаптера.
componentEmbed(coreWasm: Uint8Array | null, wit: String, opts?: { stringEncoding?, dummy?, world?, metadata? }): Uint8Array
«WIT Component» Инструмент встраивания компонентов для встраивания типов компонентов в основные двоичные файлы в качестве расширенного варианта использования генерации компонентов.
metadataAdd(wasm: Uint8Array, metadata): Uint8Array
Добавьте метаданные нового производителя в бинарный файл компонента или ядра Wasm.
См. главу «Вклад» книги Jco.
Этот проект лицензируется по лицензии Apache 2.0 за исключением LLVM. Подробнее см. ЛИЦЕНЗИЯ.
Если вы явно не указали иное, любой вклад, намеренно представленный вами для включения в этот проект, как это определено в лицензии Apache-2.0, должен лицензироваться, как указано выше, без каких-либо дополнительных условий.