Un artefact WebImage avec backend = "wasm-lm" compile Java ou Kotlin en WebAssembly pour les
hôtes JavaScript qui compilent le WebAssembly à l’exécution. Le module garde son tas et son ramasse-miettes en mémoire
linéaire : l’hôte n’a pas besoin de prendre en charge WasmGC. Comme le build pour navigateur, il
démarre via son chargeur JavaScript ; ce n’est ni un module ni un composant WASI, et il ne se déploie pas sur
Cloudflare Workers.
Construire
Les prérequis sont ceux du build pour navigateur : wasm-as de Binaryen dans le
PATH, et du code conforme aux exigences 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.jsSans manifeste :
elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello| Propriété | Valeur pour Edge |
|---|---|
backend | "wasm-lm". |
runtime | "node" pour les API compatibles Node ; "generic" détecte aussi les API du navigateur. |
autoRun | true (par défaut) exécute main au chargement de hello.js. |
Sortie et taille
| Fichier | À déployer | Taille d’un hello world |
|---|---|---|
hello.js | Oui : le chargeur. | 42 Ko |
hello.js.wasm | Oui : le module. | 2,1 Mo (660 Ko compressé avec gzip) |
hello.js.wat | Non : forme texte, pour l’inspection. | 38 Mo |
hello.js.map | Facultatif : produit avec sourceMap = true. |
Un module à mémoire linéaire est plus gros que le build WasmGC du même programme, qui utilise le ramasse-miettes de l’hôte.
Exigences de l’hôte
| Exigence | Raison |
|---|---|
Gestion des exceptions WebAssembly avec exnref | Le module l’utilise. |
| Compilation de WebAssembly à partir d’octets à l’exécution | Le chargeur lit hello.js.wasm et le compile au démarrage. |
fs de Node ou fetch | Le chargeur lit le module via l’un des deux. |
| Hôte | Exécute le bundle |
|---|---|
| Node.js 25+ | Oui : node hello.js. |
| Bun | Oui : bun hello.js. |
| Cloudflare Workers | Non : Workers ne compile que les modules intégrés au déploiement et rejette la compilation à l’exécution du chargeur avec Wasm code generation disallowed by embedder. |
| Hôtes WASI (Fastly Compute, Wasmtime) | Non : le module importe depuis son chargeur JavaScript, pas depuis WASI. |