|
|
|
|
|
|
| 层 | 技术 | 说明 |
|---|---|---|
| 前端 | Vue 3 + TypeScript | Composition API + <script setup> |
| UI | Naive UI 2 | 全局注册,开箱即用 |
| 编辑器 | Monaco Editor | 离线 Worker,完整 IDE 体验 |
| 桌面壳 | Tauri 2 (Rust) | 原生性能,跨平台打包 |
| JS 引擎 | Boa Engine | 安全沙箱执行书源脚本 |
| 构建 | Vite 6 + vue-tsc | 极速 HMR 开发体验 |
| 包管理 | pnpm | 高效依赖管理 |
| 工具 | 版本 |
|---|---|
| Node.js | >= 18 |
| pnpm | >= 8 |
| Rust | stable (2021 edition) |
| Tauri CLI | v2 |
# 1. 克隆仓库
git clone https://github.com/AoEiuV020/Legado_Tauri.git
cd Legado_Tauri
# 2. 安装前端依赖
pnpm install
# 3. 启动开发模式(前端 + Tauri 桌面应用)
pnpm run dev:desktop
# 开发服务器默认监听 0.0.0.0:1420,可直接用于局域网联调# Windows
pnpm run build:windows
# 通用构建(自动检测平台)
pnpm run build:tauri
# Android(需要配置 JDK 17)
pnpm run build:androidLegado_Tauri/
├── src/ # 前端源码
│ ├── App.vue # 根组件,CSS Grid 布局
│ ├── main.ts # 入口:Naive UI + Monaco Worker 配置
│ ├── style.css # 全局 CSS 变量 & 设计令牌
│ ├── views/ # 页面视图
│ │ ├── BookshelfView.vue # 书架
│ │ ├── BookSourceView.vue # 书源管理(安装/仓库/调试)
│ │ ├── ExploreView.vue # 发现
│ │ ├── ExtensionsView.vue # 插件管理
│ │ ├── HistoryView.vue # 历史
│ │ └── SettingsView.vue # 设置
│ ├── components/ # 组件
│ │ ├── layout/ # 布局组件(TitleBar/SideBar/TaskBar)
│ │ ├── BookSourceEditorModal.vue # Monaco 书源编辑器
│ │ └── ScriptDialog.vue # 扩展脚本对话框
│ └── composables/ # 组合式函数
│ ├── useBookSource.ts # 书源 CRUD & 模板
│ ├── useExtension.ts # 扩展管理
│ └── useScriptBridge.ts # 脚本桥接
├── src-tauri/ # Rust 后端
│ ├── src/
│ │ ├── lib.rs # 命令注册入口
│ │ ├── booksource/ # 书源引擎(Boa JS / DOM / 加密)
│ │ ├── extension/ # 扩展系统
│ │ └── utils/ # 异步工具函数
│ ├── tauri.conf.json # Tauri 配置
│ └── Cargo.toml # Rust 依赖
├── booksources/ # 示例书源文件
├── docs/ # 开发文档
└── scripts/ # 辅助脚本
本项目按前后端分离设计:开发期前端与 Rust 后端打包在同一 Tauri 壳内运行,远期后端将独立部署到服务器,前端作为纯静态客户端通过 WebSocket(默认 ws://<host>:7688/ws)连接。因此:
- 前端业务代码不得直接使用
@tauri-apps/api,所有后端调用与事件必须走useInvoke/useEventBus/useFileSrc统一封装层; - 后端业务逻辑写在
crates/reader-core(不依赖 Tauri),src-tauri仅做命令转发。
完整的强制约束、WS 协议契约与实施路线见 docs/frontend-backend-separation.md。
书源是标准的 JavaScript 文件,通过注释头声明元数据:
// @name 我的书源
// @version 1.0.0
// @author 你的名字
// @url https://example.com
// @description 书源简介
function search(keyword, page) {
const html = legado.http.get(`https://example.com/search?q=${keyword}&page=${page}`);
const doc = legado.dom.parse(html);
// ... 解析搜索结果
}内置宿主 API:
| API | 说明 |
|---|---|
legado.http.get/post() |
HTTP 请求 |
legado.dom.parse() |
HTML DOM 解析 (CSS 选择器) |
legado.base64Encode/Decode() |
Base64 编解码 |
legado.md5() / legado.sha256() |
哈希函数 |
legado.aesEncrypt/Decrypt() |
AES 加解密 |
legado.config.read/write() |
持久化配置读写 |
legado.log() / legado.toast() |
日志与通知 |
📄 完整 API 文档请参阅 docs/booksource.md
欢迎任何形式的贡献!无论是提交 Bug 报告、功能建议还是代码贡献。
- Fork 本仓库
- 创建功能分支:
git checkout -b feature/my-feature - 提交更改:
git commit -m "feat: 添加某功能" - 推送分支:
git push origin feature/my-feature - 提交 Pull Request
- 前端组件统一使用
<script setup lang="ts">风格 - 优先使用 Naive UI 组件,保持视觉一致性
- Rust 新增命令需在
lib.rs的generate_handler![]中注册 - 代码提交前请确保:
pnpm vue-tsc --noEmit— 无 TypeScript 类型错误cargo check(src-tauri 目录下)— 无 Rust 编译错误
本项目基于 MIT 许可证 开源。
如果这个项目对你有帮助,请给一个 ⭐ Star 支持我们!