Skip to content

Client Modules zh

pawaca edited this page Aug 30, 2026 · 1 revision

客户端模块

Edge 用构建时静态组装替换了上游的运行时模块扫描。

上游参考:客户端模块

上游提供了什么

ClientModuleRegistryctx.clientModules)通过增量包扫描、boot graph 组合、bundle 路由和 index 注入管理 Web 插件集成。启动时扫描 package.json 中的 dsh.client 声明,构建带依赖边和内容哈希的 WebBootGraph,注入为 window.__DSH_BOOT__。Bundle 变更通过 stat 轮询触发 HMR 更新。

Edge 改了什么

替换件 构建时静态组装

Edge 用构建时流水线替换运行时模块扫描:

  • assemble-standalone-web.mjs 读取上游已发布的包,构建每个客户端插件的 bundle,输出到 dist/plugins/
  • Boot graph 在构建时预计算并冻结——无运行时扫描,无 HMR。
  • verify-standalone.mjs 对照 expected-boot-graph.json 检查组装结果,防止意外增删。
  • Bundle 作为 Cloudflare Assets(静态文件)随 Worker 一起部署。

直接复用 所有客户端插件

32 个上游客户端插件在浏览器中原样运行。Edge 加了一个自定义插件(ui-edge),用于工作区目录选择器和文件下载——共 33 个。

Edge 没有改什么

  • 客户端插件代码——32 个上游 bundle 按发布版运行
  • Boot graph 线上格式(window.__DSH_BOOT__
  • 浏览器中的插件依赖解析
  • 客户端 cordis Context 组合

性能特征

加载时间

静态资源从 Cloudflare 边缘 CDN 投递——请求时无服务端渲染或模块扫描。Boot graph 是嵌入 HTML 的单个 JSON 对象。插件 bundle 按依赖顺序获取,使用内容哈希做缓存刷新。

Bundle 验证

verify-standalone.mjs 在构建时(CI)运行,耗时毫秒级。对比组装的插件列表与已审查的 expected-boot-graph.json。上游依赖变更导致客户端插件增删时,构建会失败,直到期望被显式更新。

架构总结

组件 分类 上游对应
构建时组装 替换 运行时 ClientModuleRegistry
静态资源投递 替换 Bundle 路由 + HMR
Boot graph 验证 替换 运行时 graph 组合
32 个上游客户端插件 复用
ui-edge 替换 无对应(Edge 专属 UI)

关键观察:Edge 用部署简单性(静态 bundle、构建时验证)换取了运行时灵活性(HMR、动态扫描)。客户端插件系统完全相同——只有投递机制变了。

English

中文

Clone this wiki locally