Ein WebImage-Artefakt mit backend = "wasm-lm" kompiliert Java oder Kotlin zu WebAssembly
für JavaScript-Hosts, die WebAssembly zur Laufzeit kompilieren. Das Modul hält seinen Heap und seinen Garbage Collector
im linearen Speicher, der Host braucht also keine WasmGC-Unterstützung. Wie der Browser-Build
startet es über seinen JavaScript-Loader; es ist weder ein WASI-Modul noch eine WASI-Komponente und lässt sich nicht
auf Cloudflare Workers ausliefern.
Bauen
Die Voraussetzungen entsprechen denen des Browser-Builds: wasm-as aus Binaryen
im PATH und Code, der die Anforderungen von Native Image erfüllt.
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.jsOhne Manifest:
elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello| Eigenschaft | Wert für Edge |
|---|---|
backend | "wasm-lm". |
runtime | "node" für Node-kompatible APIs; "generic" erkennt zusätzlich Browser-APIs. |
autoRun | true (Standard) führt main aus, sobald hello.js geladen ist. |
Ausgabe und Größe
| Datei | Ausliefern | Größe bei Hello World |
|---|---|---|
hello.js | Ja: der Loader. | 42 KB |
hello.js.wasm | Ja: das Modul. | 2,1 MB (660 KB mit gzip) |
hello.js.wat | Nein: Textform, zur Inspektion. | 38 MB |
hello.js.map | Optional: wird mit sourceMap = true erzeugt. |
Ein Modul mit linearem Speicher ist größer als der WasmGC-Build desselben Programms, der den Garbage Collector des Hosts nutzt.
Anforderungen an den Host
| Anforderung | Grund |
|---|---|
WebAssembly-Ausnahmebehandlung mit exnref | Das Modul nutzt sie. |
| WebAssembly zur Laufzeit aus Bytes kompilieren | Der Loader liest hello.js.wasm und kompiliert es beim Start. |
Node-fs oder fetch | Der Loader liest das Modul über eines davon. |
| Host | Führt das Bundle aus |
|---|---|
| Node.js 25+ | Ja: node hello.js. |
| Bun | Ja: bun hello.js. |
| Cloudflare Workers | Nein: Workers kompilieren nur Module, die beim Deployment gebündelt wurden, und weisen das Kompilieren des Loaders zur Laufzeit mit Wasm code generation disallowed by embedder zurück. |
| WASI-Hosts (Fastly Compute, Wasmtime) | Nein: Das Modul importiert aus seinem JavaScript-Loader, nicht aus WASI. |