Appearance
Runtime 隔离桥(Wails Events/Browser)
系统概览
@wailsio/runtime 的隔离层(ADR-177,绞杀者模式)。运行时动态选型:Web 走 no-op 实现,Wails 走真实的 @wailsio/runtime(动态 import,避免静态依赖)。生产代码中 @wailsio/runtime 的 value import 只允许出现在本文件,业务侧一律经 getRuntimeBridge() 访问。
核心职责
RuntimeEvents—on/once/off/offAll/emit,对齐 Wails 真实 API(on返回 unsubscribe、off可变参数、emit返回Promise<boolean>)RuntimeBrowser—openURL(url),Web 侧window.open+noopener,被拦截时抛可诊断错误RuntimeBridge— 聚合events+browser+ 应用级disposeAll()
对外 API(节选)
getRuntimeBridge()— 单例选型(web → WebRuntimeBridge / else → WailsRuntimeBridge)initRuntimeBridge()— bootstrap 桥接注入后调用,加载真实@wailsio/runtime(Web 侧短路)events.on(name, cb): Unsubscribe— 主契约:业务侧必须保存返回值并在 dispose 时调用events.off(...names)— 按事件名移除会清掉所有模块监听,谨慎使用disposeAll()— 仅供应用级 shutdown,遍历释放所有 unsubscribe
使用规范(ADR-177 第三轮审核)
- 业务侧优先保存
on()返回的unsubscribe并在 dispose 调用——这是主契约 off(...names)仅兼容能力,按事件名移除会清掉所有模块监听,需谨慎disposeAll()不允许业务模块随意全局清理
UI 入口
- 无直接 UI:为 Wails 事件/后端调用桥,经各功能菜单间接生效(菜单全景见 menu-map.md)。
与其他子系统关系
wails-bindings.ts经本桥的events透传(命名导出Events)- 各业务模块的事件订阅统一经此处,实现平台无关与 HMR 资源释放