Артефакт WebImage з backend = "wasm-lm" компілює Java або Kotlin у WebAssembly для
JavaScript-хостів, які компілюють WebAssembly під час виконання. Модуль тримає свою купу та збирач сміття в
лінійній пам’яті, тому хосту не потрібна підтримка WasmGC. Як і збірка для браузера, він
запускається через свій завантажувач на JavaScript; це не модуль і не компонент WASI, і він не розгортається в
Cloudflare Workers.
Збирання
Вимоги ті самі, що й для збірки для браузера: wasm-as з Binaryen у PATH і
код, що відповідає вимогам 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.jsБез маніфесту:
elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello| Властивість | Значення для Edge |
|---|---|
backend | "wasm-lm". |
runtime | "node" для Node-сумісних API; "generic" також визначає API браузера. |
autoRun | true (за замовчуванням) запускає main під час завантаження hello.js. |
Результат і розмір
| Файл | Розгортати | Розмір hello world |
|---|---|---|
hello.js | Так: завантажувач. | 42 КБ |
hello.js.wasm | Так: модуль. | 2,1 МБ (660 КБ у gzip) |
hello.js.wat | Ні: текстова форма для перегляду. | 38 МБ |
hello.js.map | За бажанням: створюється з sourceMap = true. |
Модуль із лінійною пам’яттю більший за збірку WasmGC тієї самої програми, яка використовує збирач сміття хоста.
Вимоги до хоста
| Вимога | Причина |
|---|---|
Обробка винятків WebAssembly з exnref | Модуль її використовує. |
| Компіляція WebAssembly з байтів під час виконання | Завантажувач читає hello.js.wasm і компілює його під час запуску. |
fs з Node або fetch | Завантажувач читає модуль через одне з них. |
| Хост | Запускає бандл |
|---|---|
| Node.js 25+ | Так: node hello.js. |
| Bun | Так: bun hello.js. |
| Cloudflare Workers | Ні: Workers компілює лише модулі, включені до бандла під час розгортання, і відхиляє компіляцію завантажувачем під час виконання з помилкою Wasm code generation disallowed by embedder. |
| Хости WASI (Fastly Compute, Wasmtime) | Ні: модуль імпортує зі свого завантажувача на JavaScript, а не з WASI. |