# 迅雷极速版 **Repository Path**: Menjian/thunder-speed ## Basic Information - **Project Name**: 迅雷极速版 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-28 - **Last Updated**: 2026-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ThunderSpeed 迅雷极速版 基于 Electron 的桌面下载管理器,支持多协议、多线程分块下载,界面全中文。 ## AI 生成声明 本项目由 AI 自动生成,非人工手写编码。 | 项目 | 信息 | |------|------| | AI 工具 | MiMo Code Agent(小米 MiMo 团队) | | 模型 | mimo/mimo-auto | | 生成方式 | 通过对话式交互,AI 根据需求自动生成全部代码 | | 项目周期 | 2026 年 6 月 | ## 技术栈 | 层级 | 技术 | |------|------| | 桌面框架 | Electron 31 | | 渲染进程 | React 18 + TypeScript | | 状态管理 | Zustand | | 样式方案 | Tailwind CSS 3.4 | | 构建工具 | Vite 5.4(渲染进程)/ TypeScript(主进程) | | 数据存储 | SQLite(better-sqlite3) | | 设置持久化 | electron-store | | 应用打包 | electron-builder | | 开发工具 | concurrently(并行启动 Vite + Electron) | ## 支持协议 | 协议 | 状态 | 说明 | |------|------|------| | HTTP / HTTPS | ✅ 完整支持 | 多线程分块下载、断点续传 | | FTP / SFTP | ✅ 完整支持 | 通过 basic-ftp 库 | | Thunder(thunder://) | ✅ 完整支持 | 自动解码为 HTTP/HTTPS 链接 | | ED2K | ⚠️ 仅解析 | 链接可解析,但 ED2K 公共网络已停运,无下载实现 | | Magnet / BT | ⚠️ 仅解析 | 链接可解析,但受网络环境限制,无下载实现 | ## 项目结构 ``` src/ ├── main/ # Electron 主进程 │ ├── index.ts # 入口,窗口创建,服务初始化 │ ├── preload.ts # 预加载脚本,暴露 electronAPI │ ├── ipc-handlers.ts # 所有 IPC 通道注册 │ ├── tray.ts # 系统托盘 │ └── clipboard-monitor.ts # 剪贴板监听(自动抓取链接) ├── renderer/ # 渲染进程(React) │ ├── main.tsx # React 入口 │ ├── App.tsx # 根组件 │ ├── components/ # UI 组件(Sidebar, Header, TaskList, NewTaskDialog, Settings 等) │ ├── store/ # Zustand 状态管理 │ └── styles/ # 全局样式 + Tailwind ├── core/ # 下载核心逻辑 │ ├── download-engine.ts # 下载引擎(协议分发调度器) │ ├── protocol-handler.ts # 协议处理器接口 │ ├── http-handler.ts # HTTP/HTTPS 多线程下载 │ ├── ftp-handler.ts # FTP/SFTP 下载(包装 FtpDownloader) │ ├── ftp-downloader.ts # FTP 底层实现(basic-ftp) │ ├── hash-verifier.ts # 文件哈希校验 │ ├── speed-limiter.ts # 速度限制(令牌桶算法) │ └── temp-file-manager.ts # 临时文件管理 ├── task/ # 任务管理 │ ├── task-manager.ts # 任务 CRUD + JSON 持久化 │ ├── task-queue.ts # 任务队列(并发控制) │ └── task-history.ts # 任务历史 ├── protocol/ # 协议解析 │ ├── url-parser.ts # 统一 URL 解析入口 │ ├── thunder-protocol.ts # 迅雷链接解码(Base64 → HTTP) │ ├── ed2k-parser.ts # ED2K 链接解析(仅解析,无下载) │ └── magnet-handler.ts # Magnet 链接解析(仅解析,无下载) ├── settings/ # 设置 │ └── settings-store.ts # 基于 JSON 文件的持久化 └── shared/ # 主进程与渲染进程共用 ├── types.ts # 公共类型定义(DownloadTask, TaskStatus 等) ├── constants.ts # 常量(超时、分块大小、默认设置) └── utils.ts # 工具函数 ``` ## 快速开始 ### 环境要求 - Node.js >= 16 - npm ### 安装依赖 ```bash npm install ``` ### 开发模式 ```bash npm run dev ``` 同时启动 Vite 开发服务器(端口 5173)和 Electron 窗口,支持热更新。 ### 构建 ```bash # 构建主进程(TypeScript → JavaScript) npm run build:main # 构建渲染进程(Vite 打包) npm run build:renderer # 完整构建(主进程 + 渲染进程) npm run build ``` ### 打包分发 项目使用 `electron-builder` 打包,输出到 `release/` 目录。 #### 方式一:生成 NSIS 安装包(推荐) ```bash npm run dist ``` 执行 `npm run build`(编译 TypeScript + Vite 打包)后,调用 `electron-builder` 生成 Windows 安装包: - 输出文件:`release/ThunderSpeed Setup 1.0.0.exe` - 安装时可自定义安装目录 > **前提条件**:需要 Windows 开启**开发者模式**(否则 electron-builder 无法创建符号链接,winCodeSign 工具解压会失败)。 > > 开启方法:设置 → 更新和安全 → 开发者选项 → 打开"开发人员模式" 如果不想开启开发者模式,可以用以下命令跳过代码签名: ```bash npx electron-builder --win --config.win.signAndEditExecutable=false --config.win.sign=false ``` #### 方式二:生成免安装目录(用于测试) ```bash npm run pack ``` 生成 `release/win-unpacked/` 目录,包含完整的应用文件,可直接运行 `ThunderSpeed.exe`,无需安装。 如果遇到符号链接权限问题,同样可以跳过签名: ```bash npx electron-builder --win --dir --config.win.signAndEditExecutable=false --config.win.sign=false ``` #### 打包流程详解 ``` npm run dist ├── npm run build:main # TypeScript 编译 src/ → dist/ ├── npm run build:renderer # Vite 构建 src/renderer/ → dist/renderer/ └── electron-builder # 打包 Electron 应用 ├── 下载 Electron 预编译包(~111MB,首次需要) ├── 下载 winCodeSign 工具(代码签名工具,需要开发者模式) ├── 复制应用文件到 release/win-unpacked/ ├── 下载 NSIS 打包工具(~5MB,首次需要) └── 生成 ThunderSpeed Setup 1.0.0.exe 安装包 ``` #### 常见问题 | 问题 | 解决方案 | |------|----------| | `Cannot create symbolic link` | 开启 Windows 开发者模式,或用 `--config.win.signAndEditExecutable=false` 跳过 | | NSIS 下载超时 | 网络问题,重试即可;或用 `--dir` 只生成目录版本 | | `author is missed` | package.json 中缺少 author 字段,不影响打包 | | 默认图标 | 将应用图标放在 `resources/icon.png`(256x256) | #### electron-builder 配置 打包配置在 `package.json` 的 `build` 字段中: ```json { "build": { "appId": "com.thunderspeed.app", "productName": "ThunderSpeed", "directories": { "output": "release" }, "files": ["dist/**/*", "resources/**/*"], "win": { "target": "nsis", "icon": "resources/icon.png", "sign": false }, "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true } } } ``` ## npm scripts 一览 | 命令 | 说明 | |------|------| | `npm run dev` | 开发模式,同时启动 Vite + Electron | | `npm run build:main` | 仅构建主进程 | | `npm run build:renderer` | 仅构建渲染进程 | | `npm run build` | 完整构建 | | `npm run start` | 启动已构建的应用 | | `npm run pack` | 构建 + 打包到目录 | | `npm run dist` | 构建 + 创建安装包 | ## 路径别名 `@shared/*` → `src/shared/*` 在 Vite 和 tsconfig 中均已配置,可直接使用: ```typescript import { TaskStatus } from '@shared/types'; ``` ## IPC 通信 渲染进程通过 `window.electronAPI` 与主进程通信: ```typescript // 调用主进程方法 const tasks = await window.electronAPI.invoke('task:list'); // 监听主进程事件 window.electronAPI.on('task:updated', (task) => { ... }); // 发送消息 window.electronAPI.send('task:start', taskId); ``` 所有 IPC 通道在 `src/main/ipc-handlers.ts` 中注册。 ## 界面 - 无边框窗口,自定义标题栏 - 暗色主题为主(深蓝背景 #0f0f23) - 侧边栏导航 + 任务列表 - 每个任务实时显示下载速度、进度、文件大小 - 新建任务对话框带淡入淡出动画 - 删除任务时可选是否同时删除已下载文件