jco
用于使用 WebAssembly 组件的 JavaScript 工具链
字节码联盟项目
Jco 提供了一个完全原生的 JS 工具链,用于在 JavaScript 中使用 WebAssembly 组件。
特点包括:
将 Wasm 组件二进制文件“转译”为可以在任何 JS 环境中运行的 ES 模块。
Node.js 和浏览器中的 WASI Preview2 支持(实验性)。
Wasm 工具帮助程序的组件构建,可用作库或 CLI 命令以在本机 JS 环境中使用,以及通过 Binaryen 的组件优化帮助程序。
运行并提供像 Wasmtime 这样的命令,作为命令和 HTTP 代理世界的 JS 实现。
“Componentize”命令可以轻松创建用 JavaScript 编写的组件(ComponentizeJS 的包装)。
要使用其他语言创建组件,请参阅 Rust 的 Cargo Component 项目和 Wit Bindgen 以了解各种来宾 Bindgen 帮助程序。
npm 安装@bytecodealliance/jco
Jco 可以用作库导入,也可以通过jco
命令用作 CLI。
有关完整的使用示例,请参阅示例工作流程页面。
用法:jco <命令> [选项] jco - WebAssembly JS 组件工具 JS 组件转译 Bindgen 和 Wasm 工具 选项: -V, --version 输出版本号 -h, --help 显示命令命令的帮助: componentize [options] <js-source> 从 JavaScript 模块创建组件 transpile [options] <component-path> 将 WebAssembly 组件转换为 JS + core Wasm 以执行 JavaScript types [options] <wit-path> 为给定的 WIT 生成类型 run [options] <command> [args...] 运行 WASI 命令组件 serve [options] <server> [args...] 提供 WASI HTTP 组件 opt [options] <component-file> 优化 Wasm 组件,包括运行 wasm-opt Binaryen 优化 wit [选项] <组件路径> 从 WebAssembly 组件中提取 WIT [wasm-tools 组件 wit] print [options] <input> 打印二进制文件的 WebAssembly WAT 文本 [wasm-tools print] 元数据显示 [选项] [模块] 提取 Wasm 二进制文件的生产者元数据 [wasm-tools 元数据显示] 元数据添加 [选项] [模块] 添加 Wasm 二进制文件的生产者元数据 [wasm-tools 元数据添加] parse [options] <input> 将 Wasm 文本格式解析为二进制文件 [wasm-tools parse] new [options] <core-module> 创建一个改编自组件核心 Wasm [wasm-tools 组件 new] 的 WebAssembly 组件 embed [options] [core-module] 将组件输入部分嵌入到核心 Wasm 模块中 [wasm-tools component embed] help [command] 显示命令的帮助
有关各个命令选项的帮助,请使用jco <cmd> --help
。
有关更多背景和信息,请参阅转换文档。
为了直接调用 Rust 中的转译,Jco 中使用的 bindgen 也可以在 crates.io 上作为 js-component-bindgen 获得。
对于实现 WASI Command 世界的 Wasm 组件,提供了jco run
实用程序来在 Node.js 中运行这些应用程序。
jco run cowasy.component.wasm hello
使用 Preview2-shim WASI 实现,提供对底层系统原语的完全访问,包括文件系统和环境变量权限。
对于 HTTP Proxy 组件, 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
通过嵌入 Spidermonkey 引擎,从实现 WIT 世界定义的 JS 模块创建组件。
有关此过程的更多详细信息,请参阅 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 许可证中所定义)均应按上述方式获得许可,无需任何附加条款或条件。