返回博客
深入原理(一):模块化架构背后
我们如何将 main.ts 从 3000 行精简到 300 行,并加入了类 ChatGPT 的流式查询界面。
挑战
v1.0.0 发布时,整个插件的逻辑都写在一个 main.ts 文件里,将近 3000 行。它确实能用——多页面生成、结构化 JSON 提示词、双向链接、Lint 系统,一应俱全。但这是一个单体架构。每加一个新功能,都要在几千行交织的逻辑中摸索。
重构:9 个专注模块
v1.2.0 将代码库拆分为 9 个专注模块。结果是:main.ts 缩减到仅 305 行——减少了 90%。
- 提取引擎 — 从源笔记中提取实体和概念
- 查询引擎 — 流式 ChatGPT 风格对话,支持 Markdown 渲染
- Lint 系统 — 检测重复、死链、孤立页面、空页面
- 自动维护 — 文件监听、定期 Lint、启动健康检查
- 设置界面 — 分步配置引导
- 页面工厂 — 生成实体、概念和摘要页面
- LLM 客户端 — 统一适配 Anthropic、OpenAI、Gemini 等多家服务商
为什么这很重要: 每个模块职责单一、接口清晰、可独立测试。v1.7.x 的快速迭代节奏之所以成为可能,正是因为基础足够扎实。
对话式查询界面
对话式查询界面让你能就自己的知识提问:
- 流式响应,支持 Markdown 渲染
- 多轮对话,保留上下文
- 答案中嵌入 Wiki 链接,如同知识面包屑
- 保存到 Wiki — 有价值的对话可以转化为 Wiki 页面
这让插件从一个知识整理器变成了一个知识伙伴。