docs: 更新 README.md 和 DESIGN.md,删除 REFACTOR-PLAN.md

- README.md: 更新版本号 v0.1.0,添加 CodeMirror 6 说明,添加关于/Gitee按钮说明
- DESIGN.md: 重写为当前架构,移除重构计划相关内容,精简为实际代码结构
- 删除 REFACTOR-PLAN.md(重构已完成)
This commit is contained in:
thzxx
2026-05-28 15:53:14 +08:00
parent 03a71bdf94
commit 4a1c06320f
3 changed files with 144 additions and 1234 deletions
+43 -122
View File
@@ -14,7 +14,7 @@
<img src="https://img.shields.io/badge/TypeScript-5.6-3178C6?style=flat-square&logo=typescript" alt="TypeScript">
<img src="https://img.shields.io/badge/React-18-61DAFB?style=flat-square&logo=react" alt="React">
<img src="https://img.shields.io/badge/License-MIT-green?style=flat-square" alt="License">
<img src="https://img.shields.io/badge/Version-2.0.0-orange?style=flat-square" alt="Version">
<img src="https://img.shields.io/badge/Version-v0.1.0-orange?style=flat-square" alt="Version">
</p>
<p align="center">
@@ -30,7 +30,7 @@
|------|------|
| 📑 **多标签页** | 同时打开多个文件,Ctrl+T 新建、Ctrl+W 关闭、Ctrl+Tab MRU 切换 |
| 📂 **文件打开** | 按钮打开 / 拖拽打开 / 文件关联(双击 .md) / 命令行参数 |
| ✏️ **实时编辑** | 左侧编辑器,支持 Tab 缩进、行号显示、光标位置、大文件虚拟化行号 |
| ✏️ **实时编辑** | 左侧编辑器CodeMirror 6,支持 Tab 缩进、行号显示、折叠、括号匹配 |
| 👁 **实时预览** | 右侧预览面板,基于 unified/rehype 管线渲染,编辑即更新 |
| 🔤 **代码高亮** | 基于 rehype-highlight,支持 180+ 种编程语言语法高亮 |
| 🎨 **两种视图** | 编辑模式 / 预览模式,自由切换 |
@@ -43,32 +43,6 @@
| ⌨️ **快捷键** | 完整的键盘快捷键支持,操作高效 |
| 📦 **NSIS 安装包** | 一键打包为 Windows exe 安装程序 / 便携版 |
## 📸 界面预览
```
┌──────────────────────────────────────────────────────────────────────────┐
│ MarkLite - README.md ─ □ ✕ │
├──────────────────────────────────────────────────────────────────────────┤
│ 📁 打开 │ 💾 保存 │ ✏️ 编辑 │ 👁 预览 │ 🌙 │
├──────────────────────────────────────────────────────────────────────────┤
│ [README.md] [DESIGN.md] [main.ts] [+] │
├──────────┬─────────────────────────┬─────────────────────────────────────┤
│ 资源管理器│ │ │
│ ▼ MarkLite│ 🔍 查找... 3/12 │ MarkLite │
│ 📁 src │ [替换... ] [替换][全部]│ ───────────── │
│ 📄 README│ │ │
│ 📄 DESIGN│ 1 # MarkLite │ 一款轻量级的 Windows 本地 │
│ 📁 lib │ 2 │ Markdown 编辑器桌面应用... │
│ 📁 assets│ 3 一款轻量级的... │ │
│ │ 4 │ ■ 实时编辑 │
│ │ 5 ## 功能特性 │ ■ 实时预览 │
│ │ 6 │ ■ 代码高亮 │
│ │ 7 - 📝 实时编辑 │ │
├──────────┴─────────────────────────┴─────────────────────────────────────┤
│ README.md │ UTF-8 │ Markdown │ 2.1 KB │ 行 9, 列 12 │
└──────────────────────────────────────────────────────────────────────────┘
```
## 🚀 快速开始
### 环境要求
@@ -128,11 +102,9 @@ npm run lint
| `Ctrl + 2` | 预览模式 |
| `Ctrl + F` | 搜索 |
| `Ctrl + H` | 搜索并替换 |
| `Ctrl + B` | 粗体 |
| `Ctrl + I` | 斜体 |
| `Enter` / `Shift+Enter` | 下一个 / 上一个匹配 |
| `Alt + C` | 切换区分大小写 |
| `Alt + R` | 切换正则表达式 |
| `Ctrl + Shift + G` | 替换当前匹配 |
| `Ctrl + Shift + H` | 全部替换 |
| `Esc` | 关闭搜索栏 |
## 🛠️ 技术栈
@@ -142,13 +114,14 @@ npm run lint
| 桌面框架 | [Electron](https://www.electronjs.org/) v28 | 跨平台桌面应用框架 |
| 前端框架 | [React](https://react.dev/) v18 | 函数组件 + Hooks |
| 类型系统 | [TypeScript](https://www.typescriptlang.org/) v5.6 | 全量类型安全 |
| 编辑器 | [CodeMirror](https://codemirror.net/) v6 | 现代化代码编辑器 |
| 状态管理 | [Zustand](https://zustand-demo.pmnd.rs/) v5 | 轻量级状态管理 |
| 持久化 | [Dexie.js](https://dexie.org/) v4 (IndexedDB) | 标签页状态 & 用户设置持久化 |
| Markdown 解析 | [unified](https://unifiedjs.com/) / [remark](https://remark.js.org/) / [rehype](https://rehype.js.org/) | 插件化 Markdown 渲染管线 |
| 代码高亮 | [rehype-highlight](https://github.com/rehypejs/rehype-highlight) | 基于 highlight.js 的语法高亮 |
| 构建工具 | [electron-vite](https://electron-vite.org/) v3 | Electron + Vite 集成,HMR 热更新 |
| 打包工具 | [electron-builder](https://www.electron.build/) | 生成 exe 安装包 |
| 样式 | CSS Variables + CSS Modules | 主题驱动,样式隔离 |
| 样式 | CSS Variables | 主题驱动,亮色/暗色切换 |
## 📁 项目结构
@@ -161,125 +134,73 @@ MarkLite/
├── .eslintrc.cjs # ESLint + TypeScript 规则
├── src/
│ ├── main/ # ===== 主进程 (Node.js) =====
│ ├── main/ # 主进程 (Node.js)
│ │ ├── index.ts # 入口:窗口创建、app 生命周期、单实例锁
│ │ ├── ipc-handlers.ts # 所有 ipcMain.handle 注册
│ │ ├── file-system.ts # 文件读写、目录树构建、BOM 剥离
│ │ ├── file-watcher.ts # fs.watch 封装(单文件 + 目录监听)
│ │ ── window-manager.ts # 窗口创建、关闭拦截、单实例锁
│ │ └── ipc-channels.ts # IPC 通道名常量
│ │ ── window-manager.ts # 窗口创建、关闭拦截、单实例锁
│ │
│ ├── preload/ # ===== 预加载脚本 =====
│ ├── preload/ # 预加载脚本
│ │ └── index.ts # contextBridge 类型安全暴露
│ │
│ ├── renderer/ # ===== 渲染进程 (React) =====
│ ├── renderer/ # 渲染进程 (React 18)
│ │ ├── index.html # 入口 HTML(含 CSP 策略)
│ │ ├── main.tsx # React 入口 (createRoot)
│ │ ├── main.tsx # React 入口
│ │ ├── App.tsx # 根组件:布局编排、全局事件
│ │ │
│ │ ├── components/ # ----- UI 组件 -----
│ │ │ ├── Toolbar/ # 工具栏(打开、保存、视图切换、暗色主题)
│ │ │ ├── TabBar/ # 标签页栏(多标签、关闭、MRU 切换)
│ │ │ ├── Editor/ # 编辑器(行号、大文件虚拟化、Tab 缩进)
│ │ │ ├── Preview/ # Markdown 预览面板unified/rehype 渲染)
│ │ │ ├── Sidebar/ # 侧边栏文件树(递归、展开折叠、独立文件区)
│ │ │ ├── SearchBar/ # 搜索替换栏(高亮、正则、大小写)
│ │ │ ├── StatusBar/ # 状态栏(文件名、编码、语言)
│ │ ├── components/ # UI 组件
│ │ │ ├── Toolbar/ # 工具栏
│ │ │ ├── TabBar/ # 标签页栏
│ │ │ ├── Editor/ # CodeMirror 6 编辑器
│ │ │ ├── Preview/ # Markdown 预览面板
│ │ │ ├── Sidebar/ # 侧边栏文件树
│ │ │ ├── StatusBar/ # 状态栏
│ │ │ ├── WelcomeScreen/ # 欢迎屏幕
│ │ │ ├── Toast/ # Toast 通知
│ │ │ ├── ModifiedBanner/ # 文件外部修改提示横幅
│ │ │ ── DropOverlay/ # 拖拽文件覆盖层
│ │ │ ├── ModifiedBanner/ # 文件外部修改提示
│ │ │ ── DropOverlay/ # 拖拽文件覆盖层
│ │ │ └── Icons.tsx # SVG 图标库
│ │ │
│ │ ├── stores/ # ----- Zustand 状态管理 -----
│ │ │ ├── tabStore.ts # 标签页状态tabs、activeTabId、mruStack
│ │ │ ├── editorStore.ts # 编辑器状态viewMode、darkMode
│ │ │ ── sidebarStore.ts # 侧边栏状态tree、expandedDirs、rootPath
│ │ │ └── searchStore.ts # 搜索替换状态(matches、currentIndex、options
│ │ ├── stores/ # Zustand 状态管理
│ │ │ ├── tabStore.ts # 标签页状态
│ │ │ ├── editorStore.ts # 编辑器状态
│ │ │ ── sidebarStore.ts # 侧边栏状态
│ │ │
│ │ ├── hooks/ # ----- 自定义 Hooks -----
│ │ │ ├── useTheme.ts # 暗色/亮色主题IndexedDB 持久化)
│ │ │ ├── useSettings.ts # 用户设置读写
│ │ ├── hooks/ # 自定义 Hooks
│ │ │ ├── useTheme.ts # 暗色/亮色主题
│ │ │ ├── useSettings.ts # 用户设置
│ │ │ ├── useKeyboard.ts # 全局快捷键
│ │ │ ├── useDragDrop.ts # 拖拽打开文件
│ │ │ ├── useFileWatch.ts # 外部文件修改监听
│ │ │ └── useUnsavedWarning.ts # 未保存提醒Electron + 浏览器兼容)
│ │ │ ├── useDragDrop.ts # 拖拽打开
│ │ │ ├── useFileWatch.ts # 外部修改监听
│ │ │ └── useUnsavedWarning.ts # 未保存提醒
│ │ │
│ │ ├── lib/ # ----- 工具库 -----
│ │ │ ├── markdown.ts # Markdown 渲染管线unified → remark → rehype
│ │ │ ├── scrollSync.ts # 滚动同步算法(块级元素 DOM 位置映射)
│ │ │ ├── searchEngine.ts # 搜索匹配引擎(普通/正则/大小写/二分查找)
│ │ │ ├── fileUtils.ts # 文件大小格式化、扩展名检查
│ │ ├── lib/ # 工具库
│ │ │ ├── markdown.ts # Markdown 渲染管线
│ │ │ ├── fileUtils.ts # 文件工具函数
│ │ │ └── constants.ts # 常量定义
│ │ │
│ │ ├── db/ # ----- IndexedDB 持久化层 -----
│ │ │ ├── schema.ts # Dexie 数据库定义 + 类型(tabSnapshots/settings/recentFiles
│ │ │ ├── tabRepository.ts # 标签页状态 CRUD
│ │ │ ├── settingsRepository.ts # 用户设置 CRUD
│ │ │ └── recentFilesRepository.ts # 最近打开文件
│ │ ├── db/ # IndexedDB 持久化层
│ │ │ ├── schema.ts # Dexie 数据库定义
│ │ │ ├── tabRepository.ts # 标签页 CRUD
│ │ │ ├── settingsRepository.ts # 设置 CRUD
│ │ │ └── recentFilesRepository.ts # 最近文件
│ │ │
│ │ ├── types/ # ----- TypeScript 类型 -----
│ │ │ ├── tab.ts # Tab 接口
│ │ │ ├── file.ts # FileNode, DirTree 等
│ │ │ ├── settings.ts # Settings 接口 + 默认值
│ │ │ ├── search.ts # SearchMatch, SearchOptions
│ │ │ ├── ipc.ts # ElectronAPI 接口 + IPC 通道类型映射
│ │ │ └── index.ts # 类型统一导出
│ │ │
│ │ └── styles/ # ----- 全局样式 -----
│ │ ├── variables.css # CSS 变量(亮色/暗色主题)
│ │ ├── global.css # 全局 reset + 布局 + 组件样式
│ │ └── markdown-body.css # Markdown 预览正文样式
│ │ ├── types/ # TypeScript 类型
│ │ └── styles/ # 全局样式
│ │
│ └── shared/ # ===== 主进程/渲染进程共享 =====
│ └── shared/ # 主进程/渲染进程共享
│ ├── ipc-channels.ts # IPC 通道名常量
│ └── types.ts # 共享类型定义
├── lib/ # 第三方离线库(marked.js, highlight.js
├── assets/
│ └── icon.ico # 应用图标(多尺寸)
│ └── icon.ico # 应用图标
├── DESIGN.md # 架构设计文档
├── DEVSETUP.md # 开发环境配置指南
├── REFACTOR-PLAN.md # 重构方案文档
├── LICENSE # MIT 许可证
└── README.md # 本文件
```
## 🏗️ 架构设计
```
┌─────────────────────────────────────────────────────────────┐
│ Main Process (src/main/) │
│ 窗口管理 · 文件系统 · 文件监听 · IPC · 目录树 · 单实例锁 │
└──────────────────────┬──────────────────────────────────────┘
│ contextBridge (安全隔离)
┌──────────────────────▼──────────────────────────────────────┐
│ Preload Script (src/preload/) │
│ 类型安全 API 桥接层 │
└──────────────────────┬──────────────────────────────────────┘
┌──────────────────────▼──────────────────────────────────────┐
│ Renderer Process (src/renderer/) — React 18 │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Components (11 个) │ │
│ │ Toolbar · TabBar · Editor · Preview · Sidebar │ │
│ │ SearchBar · StatusBar · WelcomeScreen · Toast │ │
│ │ ModifiedBanner · DropOverlay │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Zustand Stores (4 个) │ │
│ │ tabStore · editorStore · sidebarStore · searchStore │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ IndexedDB (Dexie.js) │ │
│ │ tabSnapshots · settings · recentFiles │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
安全策略:contextIsolation: true + nodeIntegration: false + CSP
渲染进程无法直接访问 Node.js API
```
## 📝 支持的 Markdown 语法
- ✅ 标题(h1 ~ h6