基于 Wails + Vue 3 + TypeScript + Go 构建的桌面 EPUB 阅读器。
使用DeepSeek为辅助开发。
- 书架管理 — 导入、删除 EPUB 书籍,自动展示封面和进度
- 分章阅读 — 逐章阅读,支持左右侧按钮切换、键盘快捷键
- 精确进度追踪 — 按章节独立保存滚动位置,切换后自动恢复
- 总进度显示 — 基于内容长度的精确百分比,实时更新
- 目录导航 — 侧边栏目录面板,快速跳转任意章节
- 内部链接跳转 — EPUB 内
<a>链接自动识别,跨章节跳转保留独立进度 - 阅读设置 — 字体大小、行高、字体族、页面宽度、主题(亮色/护眼/暗色)
- 主题切换 — Light / Sepia(护眼)/ Dark 三种主题
- 进度持久化 — 关闭应用后自动保存进度,下次打开自动恢复
| 层 | 技术 |
|---|---|
| 桌面框架 | Wails v2 |
| 前端框架 | Vue 3 (Composition API + <script setup>) |
| 构建工具 | Vite |
| 类型系统 | TypeScript |
| UI 组件 | Element Plus |
| 状态管理 | Pinia |
| 路由 | Vue Router |
| 后端 | Go (EPUB 解析、进度存储、设置管理) |
epubReader/
├── main.go # Wails 应用入口
├── app.go # Go 后端绑定 (API 导出给前端)
├── go.mod / go.sum # Go 模块依赖
├── wails.json # Wails 项目配置
├── package.json # 前端依赖 (根目录)
├── backend/
│ ├── epub/
│ │ ├── parser.go # EPUB 解析器 (解压、解析 OPF/TOC)
│ │ └── structure.go # 数据结构定义
│ └── service/
│ └── book_service.go # 书籍服务 (书架、进度、设置持久化)
├── frontend/
│ ├── index.html # Vite 入口 HTML
│ ├── vite.config.ts # Vite 配置
│ ├── tsconfig.json # TypeScript 配置
│ ├── package.json # 前端依赖
│ └── src/
│ ├── main.ts # Vue 应用入口
│ ├── App.vue # 根组件
│ ├── router/index.ts # 路由配置
│ ├── types/index.ts # TypeScript 类型定义
│ ├── store/book.ts # Pinia 状态管理 (核心逻辑)
│ ├── pages/
│ │ ├── Shelf.vue # 书架页面
│ │ └── Reader.vue # 阅读器页面
│ └── components/
│ ├── Toolbar.vue # 顶栏 (返回、进度、目录、设置)
│ ├── TocPanel.vue # 目录侧边栏
│ └── SettingsPanel.vue # 设置面板
└── build/
└── bin/
└── epubReader.exe # 构建产物
go install github.com/wailsapp/wails/v2/cmd/wails@latest一定要解压两个node_modules.rar!!!
# 克隆项目后
cd epubReader
# 启动热重载开发模式
wails dev前端内容修改会自动热更新,Go 后端修改需要手动重编译。
wails build -o epubReader.exe产物位于 build/bin/epubReader.exe,为单文件可执行程序,无需额外运行时。
- 打开应用,进入书架页面
- 在书架页面点击 「+导入书籍」 按钮
- 选择
.epub文件,书籍会自动添加到书架并解析章节 - 点击书籍封面即可开始阅读
| 操作 | 方式 |
|---|---|
| 下一章 | 点击右侧 → 按钮 / 键盘 → / 空格 |
| 上一章 | 点击左侧 ← 按钮 / 键盘 ← |
| 打开目录 | 点击顶栏 「目录」 按钮 |
| 切换设置 | 点击顶栏 「设置」 按钮 |
| 返回书架 | 点击顶栏 「书架」 按钮 |
| 内部链接 | 点击内容中的 EPUB 内部链接会自动跳转 |
| 自动保存 | 滚动停止 2 秒后自动保存进度 |
- 每个章节独立记录滚动位置(底部工具栏显示每章编号)
- 阅读总进度根据各章节实际已读比例加权计算
- 关闭应用或切换章节时自动持久化到本地存储
- 再次打开书籍自动恢复到上次的章节和滚动位置
设置面板可调整:
- 字体大小 — 默认 18px
- 行高 — 默认 1.8
- 字体族 — 默认 Noto Serif SC
- 页面宽度 — 默认 800px
- 主题 — Light / Sepia / Dark
- wailsapp/wails/v2 — 桌面应用框架
- 标准库
archive/zip,encoding/xml,net/http— EPUB 解析
vue3.5 — 前端框架vue-router4.5 — 路由pinia2.3 — 状态管理element-plus2.9 — UI 组件库@element-plus/icons-vue— 图标库typescript5.7 — 类型检查vite6.0 — 构建工具
MIT