新闻详情

新闻详情

首页 / 资讯中心 / 详情

DSH-better-sidebar 源码拆解:host/client双半架构、服务注册表与懒加载chunk完整解读

发布时间:2026/9/26 2:42:02来源:尧图网络
DSH-better-sidebar 源码拆解:host/client双半架构、服务注册表与懒加载chunk完整解读
DSH-better-sidebar 源码拆解host/client双半架构、服务注册表与懒加载chunk完整解读【免费下载链接】DSH-better-sidebar开放的侧边栏底座支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git, and sub-agent pages.项目地址: https://gitcode.com/gh_mirrors/ds/DSH-better-sidebarDSH-better-sidebar 是一个开放的侧边栏底座它为 DSH 提供文件编辑预览、真实终端、侧边对话、Git 与子代理等侧边栏页面并通过ctx.betterSidebar服务注册表让任意第三方插件注册自己的侧边栏页面与文件预览器再用懒加载 chunk 把启动体积压到约 325KB。本文带你从源码层面看懂这三块核心机制理解一个服务化插件底座是如何搭起来的。一、为什么要拆成两半host/client 双半架构很多插件只跑在浏览器里但侧边栏要读文件、跑终端、管 Git这些能力必须落在 Node 进程。于是项目把代码拆成职责清晰的两半 半区入口职责host 半src/index.ts注册/sidebarJSON API目录列表、文件读写、Git、/sidebar/file媒体路由、/sidebar/html预览路由、/sidebar/bundle懒加载 chunk 路由以及终端 WebSocket 升级client 半src/client/index.tsx全部 React 渲染tab 体系、文件树、编辑器、终端视图、Git 视角等两半的边界非常干净client 不直接碰文件系统只通过 host 提供的同源 HTTP/WebSocket 路由取数据host 不持有 UI 状态所有操作都按会话sessionId作用域解析路径。文件读取、终端进程的鉴权统一走同一套浏览器信任围栏/api网关同款 Host 校验这在 src/index.ts 的文件头注释中写得很明白。这种拆法带来一个实用好处client 半热加载、host 半重启——改 UI 刷新浏览器即可改路由才需要重启 DSH。二、让插件注册侧边栏页面ctx.betterSidebar 服务注册表这是整个项目最有价值的部分。项目在客户端激活时执行一行关键代码把注册表发布到 cordis 上下文中见 src/client/index.tsx#L143ctx.provide(betterSidebar, service)注册表的实现与全部类型定义集中在 src/client/service.ts核心只有两个扩展点registerTab(descriptor)— 注册一种侧边栏页面类型id、title、icon、order、dedupeKey单实例去重、component等字段返回一个 disposer卸载时自动注销HMR 安全registerFileViewer(descriptor)— 注册一种文件预览器exts扩展名、priority优先级、detect()内容嗅探、fetchStrategy取数策略mediaUrl/fsRead/custom…。设计要点是内置功能与第三方完全对等内置的 8 个 tab文件、文件变动、任务、侧边对话、终端、浏览器、diff 等和 6 个内置预览器图片、PDF、Markdown、代码兜底等自己也是通过registerTab/registerFileViewer注册的——吃自己的狗粮第三方注册的东西和内置能力走同一条渲染管线。消费插件只需在inject里声明betterSidebar等 cordis 的服务就绪后调用即可注册顺序问题由 cordis 的就绪等待机制自动处理。上图是注册为内置 tab 的 Git 页面顶部下拉可切换多仓库与分支下方是暂存区、提交框与提交历史。完整的接入契约descriptor 全字段、声明式设置、皮肤契约、真实案例见 docs/external-plugin-guide.md机制的设计史与取舍记录在 docs/plans/2026-08-11-service-registry-design.md。三、启动只拉 325KB懒加载 chunk 是怎么做的侧边栏要内嵌 xterm 终端、CodeMirror 编辑器、Mermaid 图表渲染器全量打包曾是约 24.6MB 的单文件——页面一打开就要下载、解析、执行全部重依赖。项目用插件自有的 chunk 分块方案把启动体积降到约 325KB 核心包方案全貌见 docs/plans/2026-08-12-lazy-chunks-design.md。机制分三层 构建期每个重依赖是独立 tsdown 浏览器 bundlelib/client-name.js脚本执行时把自己的 factory 注册到全局globalThis.__dshChunks__[name]——刻意绕开宿主模块系统的 import 解析因为那条路径在不同 DSH 版本间行为不稳定服务端host 半的/sidebar/bundle/name.js路由按需下发 chunk 脚本实现于 src/bundle-route.ts带no-cache ETag契约刷新页面时未变化的 chunk 直接 304 免重下运行期src/client/chunk-loader.ts 的loadChunk(name)注入脚本 → 从全局注册表取 factory → 用自定义 require经宿主ctx.modules.import的 seed 分支解析 React 等 externals物化。当前 chunk 清单只有terminal/editor/mermaid/locale四个Office 预览已交给生态插件缓存契约是三层各带失败路径内存层每个 chunk 一个 in-flight promise 做并发去重、脚本执行层幂等覆盖槽位、HTTP 层 ETag 重校验——任何一层失败都会清缓存并在下次打开时自动重试且加载失败只让单个视图显示错误 重试按钮不拖垮整个面板。这套方案还有一个硬约束核心 bundle 禁止静态 importsrc/client/chunks/*由 tsdown.config.ts 的构建纯度门拦截端到端由 tests/e2e/mount.e2e.ts 的真实挂载冒烟守护。四、源码速查地图想了解什么看哪里host 路由总入口src/index.ts服务注册表实现与类型src/client/service.ts内置 tab / 预览器注册src/client/builtins/懒加载 chunk 加载器src/client/chunk-loader.ts各特性逐条设计史docs/plans/小结DSH-better-sidebar 的架构精髓可以浓缩成一句话——host/client 双半划清 Node 与浏览器的职责边界ctx.betterSidebar注册表把内置功能降级为注册表中的一个条目从而对生态彻底开放懒加载 chunk 则用三层缓存把按需加载做稳。读懂这三块你就掌握了服务化插件底座的标准写法。【免费下载链接】DSH-better-sidebar开放的侧边栏底座支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git, and sub-agent pages.项目地址: https://gitcode.com/gh_mirrors/ds/DSH-better-sidebar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

某广告推广平台 API 签名算法逆向分析还原 2026/9/26 4:08:53

某广告推广平台 API 签名算法逆向分析还原

阅读须知 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!擅自使用…

阅读更多 →
React 列表与表单 2026/9/26 4:08:53

React 列表与表单

React 列表与表单 前置&#xff1a;React State 与事件 目标&#xff1a;map key 渲染列表&#xff1b;表单提交增加待办。 动手 完整代码&#xff1a;react2/04-lists-forms/demo cd react2/04-lists-forms/demo npm install npm run dev要点 {todos.map((todo) > (<…

阅读更多 →
【大数据毕设精品】基于大数据的智能制造资源效率数据分析与可视化,附源码_数据可视化_数据分析_数据挖掘_Hadoop_spark_文档指导_毕设指导 2026/9/26 4:08:53

【大数据毕设精品】基于大数据的智能制造资源效率数据分析与可视化,附源码_数据可视化_数据分析_数据挖掘_Hadoop_spark_文档指导_毕设指导

&#x1f496;&#x1f496;作者&#xff1a;计算机毕业设计杰瑞 &#x1f499;&#x1f499;个人简介&#xff1a;曾长期从事计算机专业培训教学&#xff0c;本人也热爱上课教学&#xff0c;语言擅长Java、微信小程序、Python、Golang、安卓Android等&#xff0c;开发项目包括…

阅读更多 →
Linux 端口被占用怎么办?复现一次 8000 端口冲突 2026/9/26 4:08:53

Linux 端口被占用怎么办?复现一次 8000 端口冲突

启动一个服务时&#xff0c;终端突然出现 Address already in use&#xff0c;很容易下意识去搜索“如何杀掉端口”。但端口不是进程&#xff0c;真正需要查清的是&#xff1a;哪个地址上的哪个协议端口&#xff0c;正被哪个进程使用&#xff1f;它是不是自己刚启动的测试服务&…

阅读更多 →
PY32F系列MCU在OTA时App区概率性跑不起来的根因分析(1) 2026/9/26 4:08:52

PY32F系列MCU在OTA时App区概率性跑不起来的根因分析(1)

一、问题现象1. 概述在项目中使用PY32F0和PY32F4系列的两款芯片。在OTA时会有概率性App无法正常跑起来。2. 详情细节描述如下&#xff1a;压测OTA&#xff0c;不断进行反复升级&#xff08;比如100次、500次、1000次&#xff09;。发现总体上会有10~20%的概率App不能正常跑起来…

阅读更多 →
Python agogosml-cli 包详解与实战案例 2026/9/26 4:08:46

Python agogosml-cli 包详解与实战案例

1. 引言agogosml-cli 是一个面向机器学习流水线开发的 Python 命令行工具包&#xff0c;它围绕 agogosml 框架提供了一套简洁的脚手架能力&#xff0c;帮助开发者快速创建、配置、运行和调试机器学习实验。本文将从功能、安装、语法、参数、实际案例以及常见错误与注意事项六个…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉