调试与热重载
插件调试 harness 让你无需启动 Tauri、无需启动 Rust 后端,在纯浏览器(Chromium)里调试插件逻辑。快速开始
推荐:直接用qomicex dev(仓库内插件自动走 harness 模式):
Playwright 未安装时提示:pnpm run harness -- hello-plugin的--是 pnpm 参数转发;也可以直接node scripts/harness/run.mjs hello-plugin。
架构
组件
Stub 接口一览
自定义 mock 数据
settings、systemInfo、proxyResponse、modpackInstall、downloadStart、downloadProgress、fileRead、execCommand、wasmList、pluginStates({ "插件id": "active" })。
断点调试
pnpm run harness -- hello-plugin --headed(有头模式)- 浏览器里 F12 打开 DevTools
- 插件渲染在 iframe 内(沙箱
sandbox="allow-scripts",opaque origin)——在 DevTools 元素面板选中 iframe 后,Console 上下文下拉里切换到该 iframe 的 document,即可直接调__PLUGIN_API__.call('getSettings')验证桥与 stub 返回值 - Sources 面板给
src/plugins/sandbox.ts的handleApiCall打断点,可单步跟踪__PLUGIN_API__postMessage →executePluginMethod→createPluginBridge全链路
codegen 不会注入 Tauri mock,纯看页面渲染 / 走 UI 交互可用;要验证桥 API 请走 harness。
热重载
- 监听
plugins-dev/{pluginId}/下的src/、index.html、theme.css、overlay.html、vite.config.ts - 变更 → 400ms 防抖 → 在插件目录执行构建命令(默认
pnpm run build,可用--build-cmd覆盖)→ 构建成功 →page.reload()整页刷新重新挂载插件 iframe - 构建失败不刷新页面,stderr 输出到终端,方便边改边看
CLI 集成
qomicex dev 在仓库内时自动检测并调用 harness(见 qomicex CLI 工具参考):
限制与注意事项
- Chromium ≠ WebView2:渲染/复合行为可能有差异(如 backdrop-filter),Web 调试结论需在真实 Tauri/WebView2 复核
- harness 是只读沙箱:stub 对真实写数据 / 启动实例 / 真实下载全部返回假数据或 400;不要在插件里触发真实业务动作
- 退出清理:Ctrl+C 后 run.mjs 会 kill 自己 spawn 的 stub 和 Vite;如果你自己先起了 Vite(:1420)(
pnpm run dev),harness 直接复用、退出时不会杀掉你那个进程 - iframe 沙箱:
sandbox="allow-scripts"无allow-same-origin,iframe 内同步while(true)仍可能阻塞共享渲染进程(与真实 WebView2 一致) - 插件依赖
@qomicex/plugin-ui,构建需要其dist/已生成(pnpm --filter @qomicex/plugin-ui build)