Un artefacto WebImage con backend = "wasm-lm" compila Java o Kotlin a WebAssembly para
hosts JavaScript que compilan WebAssembly en tiempo de ejecución. El módulo mantiene su heap y su recolector de
basura en memoria lineal, así que el host no necesita compatibilidad con WasmGC. Como la
compilación para navegador, se inicia mediante su cargador JavaScript; no es un módulo ni un
componente WASI, y no se despliega en Cloudflare Workers.
Compilar
Los requisitos previos son los de la compilación para navegador: wasm-as de
Binaryen en el PATH, y código que cumpla los requisitos de Native Image.
amends "elide:project.pkl"
import "elide:Jvm.pkl" as jvm
import "elide:NativeImage.pkl" as nativeImage
name = "hello-edge"
artifacts {
["app-jar"] = new jvm.Jar {
sources { "main" }
}
["edge"] = new nativeImage.WebImage {
from { "app-jar" }
name = "hello"
entrypoint = "Hello"
backend = "wasm-lm"
runtime = "node"
}
}elide build
node .dev/artifacts/native-image/hello.jsSin manifiesto:
elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello| Propiedad | Valor para Edge |
|---|---|
backend | "wasm-lm". |
runtime | "node" para las API compatibles con Node; "generic" también detecta las API del navegador. |
autoRun | true (por defecto) ejecuta main cuando se carga hello.js. |
Salida y tamaño
| Archivo | Desplegar | Tamaño de un hola mundo |
|---|---|---|
hello.js | Sí: el cargador. | 42 KB |
hello.js.wasm | Sí: el módulo. | 2,1 MB (660 KB con gzip) |
hello.js.wat | No: forma de texto, para inspección. | 38 MB |
hello.js.map | Opcional: se genera con sourceMap = true. |
Un módulo de memoria lineal es más grande que la compilación WasmGC del mismo programa, que usa el recolector de basura del host.
Requisitos del host
| Requisito | Motivo |
|---|---|
Manejo de excepciones de WebAssembly con exnref | El módulo lo usa. |
| Compilar WebAssembly a partir de bytes en tiempo de ejecución | El cargador lee hello.js.wasm y lo compila al iniciarse. |
fs o fetch de Node | El cargador lee el módulo mediante uno de ellos. |
| Host | Ejecuta el paquete |
|---|---|
| Node.js 25+ | Sí: node hello.js. |
| Bun | Sí: bun hello.js. |
| Cloudflare Workers | No: Workers solo compila módulos incluidos al desplegar y rechaza la compilación en tiempo de ejecución del cargador con Wasm code generation disallowed by embedder. |
| Hosts WASI (Fastly Compute, Wasmtime) | No: el módulo importa de su cargador JavaScript, no de WASI. |