依赖与计算
插件可以使用浏览器生态中的库。先选择包格式,再安排初始化与计算的生命周期。
source 与 compiled
source 包适合自包含 TS/JS 和相对导入。宿主固定编译器不安装 npm 依赖、不执行用户构建脚本,也不直接处理 Vue 单文件组件。
使用 Vue、React、编辑器引擎或其他运行时依赖时,在作者工程中预先打包为浏览器模块,将 JS、CSS、Worker、WASM 和资源交付为 compiled 包。入口仍导出 activate 或 render,安装时不再执行第三方构建配置。
预编译包的构建和打包会保留文件路径;确保运行时所需模块和二进制都在包内。避免 Node 原生模块、远程 CDN 和运行时外网导入。
创建 Worker
后台与视图均可使用 context.workers.create,无需额外 Worker 权限:
const worker = await context.workers.create(
new URL('./calculate.js', import.meta.url),
{ type: 'module', signal: operation.signal },
)
worker.postMessage({ bytes }, [bytes.buffer])operation 是插件为本次操作创建的 AbortController;在 Agent 回调中可直接使用本次 invocation.signal。监听结果、错误和取消,及时结束等待结果的 Promise。创建成功不代表引擎初始化完成。
源码 Worker 编译为 .js,创建入口指向编译后的路径。module Worker 支持包内相对导入和顶层 await;经典 Worker 的依赖需要自包含打包。
加载 WASM
WASM 与脚本一起打包。在 Worker 中可使用:
const { instance } = await WebAssembly.instantiateStreaming(
fetch(new URL('./engine.wasm', import.meta.url)),
imports,
)imports 由具体引擎提供。也可读取字节后 instantiate;WASI shim 或 Emscripten 适配仍运行在浏览器环境,不能取得真实磁盘或 Node 能力。
取消与资源
视图关闭终止它创建的 Worker,后台 Worker 随插件生命周期终止;隐藏不等于关闭。操作 signal 进一步限制单次计算,取消能终止同步 WASM,插件仍须处理结果 Promise 的结束。
限制并发、输入规模与结果大小。当前不承诺共享内存、多线程 WASM、OPFS 或精确 CPU/内存配额。验收应在真实 Lexora 隔离视图和后台中进行,普通网页成功不足以证明插件环境可用。