thzxx b34cbb5de3 v0.3.1: 添加编辑器搜索/替换功能,修复ESLint和lint-staged错误
- 新增 SearchReplace 组件:Ctrl+F 搜索、Ctrl+H 替换、实时高亮、大小写切换、导航、全部替换
- 修复 tabStore.test.ts 未使用变量的 ESLint 错误
- 修复 lint-staged tsc 命令不兼容 Milkdown .d.ts 的问题
- 版本号 0.3.0 → 0.3.1 (package.json + AboutDialog)
- tsc 零错误、78/78 测试通过、构建成功
2026-06-04 10:22:15 +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
2026-06-03 22:13:32 +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) / 命令行参数
✏️ 实时编辑 左侧编辑器(CodeMirror 6),支持 Tab 缩进、行号显示、折叠、括号匹配
👁 实时预览 右侧预览面板,基于 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 + F 搜索
Ctrl + H 搜索并替换
Ctrl + B 粗体
Ctrl + I 斜体
Enter / Shift+Enter 下一个 / 上一个匹配
Esc 关闭搜索栏

🛠️ 技术栈

组件 技术 说明
桌面框架 Electron v28 跨平台桌面应用框架
前端框架 React v18 函数组件 + Hooks
类型系统 TypeScript v5.6 全量类型安全
编辑器 CodeMirror v6 现代化代码编辑器
状态管理 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 组件
│   │   │   ├── Toolbar/            # 工具栏
│   │   │   ├── TabBar/             # 标签页栏
│   │   │   ├── Editor/             # CodeMirror 6 编辑器
│   │   │   ├── Preview/            # Markdown 预览面板
│   │   │   ├── Sidebar/            # 侧边栏文件树
│   │   │   ├── StatusBar/          # 状态栏
│   │   │   ├── WelcomeScreen/      # 欢迎屏幕
│   │   │   ├── Toast/              # Toast 通知
│   │   │   ├── ModifiedBanner/     # 文件外部修改提示
│   │   │   ├── DropOverlay/        # 拖拽文件覆盖层
│   │   │   └── Icons.tsx           # SVG 图标库
│   │   │
│   │   ├── stores/                 # Zustand 状态管理
│   │   │   ├── tabStore.ts         # 标签页状态
│   │   │   ├── editorStore.ts      # 编辑器状态
│   │   │   └── sidebarStore.ts     # 侧边栏状态
│   │   │
│   │   ├── hooks/                  # 自定义 Hooks
│   │   │   ├── useTheme.ts         # 暗色/亮色主题
│   │   │   ├── useSettings.ts      # 用户设置
│   │   │   ├── useKeyboard.ts      # 全局快捷键
│   │   │   ├── useDragDrop.ts      # 拖拽打开
│   │   │   ├── useFileWatch.ts     # 外部修改监听
│   │   │   └── useUnsavedWarning.ts # 未保存提醒
│   │   │
│   │   ├── lib/                    # 工具库
│   │   │   ├── markdown.ts         # Markdown 渲染管线
│   │   │   ├── fileUtils.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%