thzxx b65e34e288 v0.3.10: 全面优化增强 — 17项Bug修复/稳定性/功能改进
P0 致命Bug修复:
- A1: openFolderDialog 类型/运行时崩溃(文件夹打开功能完全失效)
- A2: SourceEditor 受控textarea手动改DOM反模式
- A3: tabStore.updateTabContent 内容相同时误标isModified

死代码清理:
- B1: 删除menu:*/save/as/viewMode 三个永不触发的IPC通道

健壮性修复:
- E1: rehypeFixImages 路径规范化+防越界加固
- E2: getFileName 尾斜杠返回正确文件名
- E3: EditorToolbar 行内代码按钮改用toggleInlineCodeCommand
- E4: ErrorBoundary 内联样式抽为CSS类

功能增强:
- D1: 标签页拖拽排序(tabStore.moveTab + TabBar DnD + CSS)
- D2: Milkdown自动配对括号/引号(ProseMirror插件)
- D3: 状态栏自动保存开关可点击
- D4: 文档大纲活跃标题高亮(useActiveHeading hook)
- D5: 关闭窗口前flush防抖数据(flushSaveToDB)
- D6: 搜索替换支持正则表达式

类型/架构:
- C2: preload类型集中定义(ElectronAPI契约)
- __pycache__ typo修复

文档/版本:
- README/DESIGN同步为Milkdown + v0.3.10
- 项目结构树/技术栈/快捷键表更新

验证: typecheck(仅7预存), lint, test 96/96, vite build
2026-06-23 10:47:45 +08:00
2026-06-03 22:13:32 +08:00
2026-06-03 22:13:32 +08:00
2026-06-03 22:13:32 +08:00
2026-06-03 22:13:32 +08:00
2026-05-18 10:48:40 +08:00

MarkLite

MarkLite

轻量级 Windows 本地 Markdown 编辑器

Platform Electron TypeScript React License Version

基于 Electron + React + TypeScript 构建的现代化 Markdown 桌面编辑器。
多标签页 · 实时预览 · 代码高亮 · 暗色主题 · 拖拽打开 · 搜索替换 · 文件树 · IndexedDB 持久化。


功能特性

功能 说明
📑 多标签页 同时打开多个文件,Ctrl+T 新建、Ctrl+W 关闭、Ctrl+Tab MRU 切换
📂 文件打开 按钮打开 / 拖拽打开 / 文件关联(双击 .md) / 命令行参数
✏️ 双编辑模式 Milkdown WYSIWYG 编辑器(格式化工具栏/搜索替换/正则/自动配对)+ 源码模式(textarea)
👁 实时预览 右侧预览面板,基于 unified/rehype 管线渲染,编辑即更新
🔤 代码高亮 基于 rehype-highlight,支持 180+ 种编程语言语法高亮
🎨 两种视图 编辑模式 / 预览模式,自由切换
🌙 暗色主题 一键切换亮色/暗色主题,偏好自动记忆(IndexedDB)
🔔 文件监听 外部修改文件时自动提示,支持重新加载或忽略
💾 文件保存 保存 / 另存为,支持 .md / .markdown / .txt 格式
🔍 搜索替换 Ctrl+F 搜索、Ctrl+H 替换,支持高亮匹配、大小写、正则表达式
📁 文件树 侧边栏浏览项目目录,点击打开文件,目录变化自动刷新
💾 状态持久化 标签页状态、用户设置通过 IndexedDB 持久化,关闭后可恢复
⌨️ 快捷键 完整的键盘快捷键支持,操作高效
📦 NSIS 安装包 一键打包为 Windows exe 安装程序 / 便携版

🚀 快速开始

环境要求

  • Node.js >= 18.x
  • npm >= 9.x
  • Windows 10/11 x64

安装与运行

# 克隆仓库
git clone https://gitee.com/thzxx/MarkLite.git
cd MarkLite

# 安装依赖
npm install

# 启动开发模式(带 HMR 热更新)
npm run dev

打包为 exe 安装包

# 打包 Windows x64 NSIS 安装包
npm run build

# 打包为便携版(免安装)
npm run build:portable

打包完成后,安装包位于 dist/ 目录。详见 DEVSETUP.md

其他命令

# TypeScript 类型检查
npm run typecheck

# ESLint 代码检查
npm run lint

# 运行单元测试
npm run test

# 监听模式运行测试
npm run test:watch

# 生成测试覆盖率报告
npm run test:coverage

🧪 测试

项目使用 Vitest + React Testing Library 作为测试框架。

# 运行全部测试
npm run test

# 监听模式(开发时持续运行)
npm run test:watch

# 生成覆盖率报告
npm run test:coverage

测试覆盖以下核心模块:

  • stores/ — Zustand 状态管理(tabStore, editorStore
  • lib/ — 工具库(fileUtils, markdown, errorHandler
  • hooks/ — 自定义 Hooks

测试文件位于对应模块的 __tests__/ 目录下,命名格式为 *.test.ts

⌨️ 快捷键

快捷键 功能
Ctrl + T 新建标签页
Ctrl + W 关闭当前标签页
Ctrl + Tab 切换到下一个标签页(MRU 顺序)
Ctrl + Shift + Tab 切换到上一个标签页
Ctrl + O 打开文件
Ctrl + S 保存文件
Ctrl + Shift + S 另存为
Ctrl + 1 编辑模式
Ctrl + 2 预览模式
Ctrl + 3 源码模式
Ctrl + F 搜索
Ctrl + H 搜索并替换
Ctrl + B 粗体
Ctrl + I 斜体
Enter / Shift+Enter 下一个 / 上一个匹配
Esc 关闭搜索栏

🛠️ 技术栈

组件 技术 说明
桌面框架 Electron v28 跨平台桌面应用框架
前端框架 React v18 函数组件 + Hooks
类型系统 TypeScript v5.6 全量类型安全
编辑器 Milkdown v7 WYSIWYG 编辑器 + 源码模式
状态管理 Zustand v5 轻量级状态管理
持久化 Dexie.js v4 (IndexedDB) 标签页状态 & 用户设置持久化
Markdown 解析 unified / remark / rehype 插件化 Markdown 渲染管线
代码高亮 rehype-highlight 基于 highlight.js 的语法高亮
构建工具 electron-vite v3 Electron + Vite 集成,HMR 热更新
打包工具 electron-builder 生成 exe 安装包
样式 CSS Variables 主题驱动,亮色/暗色切换

📁 项目结构

MarkLite/
├── package.json                    # 项目配置 & 依赖 & electron-builder 打包配置
├── tsconfig.json                   # TypeScript 配置
├── tsconfig.node.json              # Node 端 TypeScript 配置
├── electron.vite.config.ts         # electron-vite 构建配置
├── vitest.config.ts                # Vitest 测试框架配置
├── .eslintrc.cjs                   # ESLint + TypeScript 规则
├── CONTRIBUTING.md                 # 贡献指南
│
├── src/
│   ├── main/                       # 主进程 (Node.js)
│   │   ├── index.ts                # 入口:窗口创建、app 生命周期、单实例锁
│   │   ├── ipc-handlers.ts         # 所有 ipcMain.handle 注册
│   │   ├── file-system.ts          # 文件读写、目录树构建、BOM 剥离
│   │   ├── file-watcher.ts         # fs.watch 封装(单文件 + 目录监听)
│   │   └── window-manager.ts       # 窗口创建、关闭拦截、单实例锁
│   │
│   ├── preload/                    # 预加载脚本
│   │   └── index.ts                # contextBridge 类型安全暴露
│   │
│   ├── renderer/                   # 渲染进程 (React 18)
│   │   ├── index.html              # 入口 HTML(含 CSP 策略)
│   │   ├── main.tsx                # React 入口
│   │   ├── App.tsx                 # 根组件:布局编排、全局事件
│   │   │
│   │   ├── components/             # UI 组件 (23个)
│   │   │   ├── Toolbar/            # 工具栏
│   │   │   ├── TabBar/             # 标签页栏 (含拖拽排序)
│   │   │   ├── Editor/             # Milkdown 编辑器 + 工具栏
│   │   │   ├── Preview/            # Markdown 预览面板
│   │   │   ├── SourceEditor/       # 源码编辑模式 (textarea)
│   │   │   ├── Sidebar/            # 侧边栏文件树
│   │   │   ├── FileTree/           # 递归文件树
│   │   │   ├── OutlinePanel/       # 文档大纲 (活跃标题高亮)
│   │   │   ├── StatusBar/          # 状态栏 (自动保存开关)
│   │   │   ├── SearchReplace/      # 搜索替换面板 (支持正则)
│   │   │   ├── WelcomeScreen/      # 欢迎屏幕
│   │   │   ├── Toast/              # Toast 通知
│   │   │   ├── ConfirmDialog/      # 确认对话框
│   │   │   ├── ModifiedBanner/     # 文件外部修改提示
│   │   │   ├── DropOverlay/        # 拖拽文件覆盖层
│   │   │   ├── ErrorBoundary/      # 错误边界
│   │   │   ├── AboutDialog/        # 关于对话框
│   │   │   ├── LoadingSpinner/     # 加载指示器
│   │   │   └── Icons.tsx           # SVG 图标库
│   │   │
│   │   ├── stores/                 # Zustand 状态管理
│   │   │   ├── tabStore.ts         # 标签页状态
│   │   │   ├── editorStore.ts      # 编辑器状态
│   │   │   └── sidebarStore.ts     # 侧边栏状态
│   │   │
│   │   ├── hooks/                  # 自定义 Hooks (19个)
│   │   │   ├── useTheme.ts         # 暗色/亮色主题
│   │   │   ├── useSettings.ts      # 视图模式
│   │   │   ├── useSettingsInit.ts  # 设置初始加载
│   │   │   ├── useKeyboard.ts      # 全局快捷键
│   │   │   ├── useDragDrop.ts      # 拖拽打开
│   │   │   ├── useFileWatch.ts     # 外部修改监听
│   │   │   ├── useUnsavedWarning.ts # 未保存提醒
│   │   │   ├── useAutoSave.ts      # 自动保存
│   │   │   ├── useAutoExpandDir.ts # 自动展开目录
│   │   │   ├── useActiveHeading.ts # 活跃标题追踪
│   │   │   └── ...                 # 文件操作、IPC监听等
│   │   │
│   │   ├── lib/                    # 工具库
│   │   │   ├── markdown.ts         # Markdown 渲染管线
│   │   │   ├── fileUtils.ts        # 文件工具函数
│   │   │   ├── errorHandler.ts     # 错误处理
│   │   │   └── constants.ts        # 常量定义
│   │   │
│   │   ├── db/                     # IndexedDB 持久化层
│   │   │   ├── schema.ts           # Dexie 数据库定义
│   │   │   ├── tabRepository.ts    # 标签页 CRUD
│   │   │   ├── settingsRepository.ts # 设置 CRUD
│   │   │   └── recentFilesRepository.ts # 最近文件
│   │   │
│   │   ├── types/                  # TypeScript 类型
│   │   └── styles/                 # 全局样式
│   │
│   └── shared/                     # 主进程/渲染进程共享
│       ├── ipc-channels.ts         # IPC 通道名常量
│       └── types.ts                # 共享类型定义
│
├── assets/
│   └── icon.ico                    # 应用图标
├── DESIGN.md                       # 架构设计文档
├── DEVSETUP.md                     # 开发环境配置指南
├── LICENSE                         # MIT 许可证
└── README.md                       # 本文件

📝 支持的 Markdown 语法

  • 标题(h1 ~ h6
  • 粗体 / 斜体 / 删除线
  • 有序列表 / 无序列表
  • 任务列表 - [x]
  • 代码块(围栏式 + 语法高亮,180+ 语言)
  • 行内代码
  • 链接 / 图片(支持相对路径)
  • 表格
  • 引用块
  • 水平线
  • HTML 内联元素
  • GFMGitHub Flavored Markdown

🔧 Git Hooks

项目使用 Husky + lint-staged 自动执行代码检查:

  • pre-commit: 对暂存的 .ts/.tsx 文件运行 ESLint 和 TypeScript 类型检查;对 .json/.css/.md 文件运行 Prettier 格式化
# 初始化 git hooksnpm install 时自动执行)
npm run prepare

📄 许可证

MIT License © 2026 thzxx


如果觉得有用,请点个 Star 支持一下!

S
Description
MarkLite - A Markdown editor application
Readme MIT
2.8 MiB
v0.3.12
Latest
2026-07-06 10:51:39 +08:00
Languages
TypeScript 85.2%
CSS 14.3%
JavaScript 0.3%
HTML 0.2%