Артефакт 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. |