Files
LagZero/docs/project-structure.md

206 lines
5.2 KiB
Markdown

# LagZero 目录结构
## 1. 说明
下面的目录树是面向开发的精简版,省略了以下内容:
- 构建产物:`dist/`、`dist-electron/`、`release/`
- 依赖目录:`node_modules/`
- 本地 AI/IDE 辅助目录:`.agent/`、`.agents/`、`.codex/`、`.qoder/`、`.trae/`
## 2. 目录树
```text
LagZero
├─ docs/
├─ docImages/
├─ electron/
│ ├─ common/
│ │ └─ store.ts
│ ├─ db/
│ │ └─ schema.ts
│ ├─ main/
│ │ ├─ bootstrap.ts
│ │ ├─ index.ts
│ │ ├─ logger.ts
│ │ ├─ tray.ts
│ │ └─ window.ts
│ ├─ preload/
│ │ └─ index.ts
│ ├─ services/
│ │ ├─ scanners/
│ │ │ ├─ battlenet.ts
│ │ │ ├─ ea.ts
│ │ │ ├─ epic.ts
│ │ │ ├─ local.ts
│ │ │ ├─ microsoft.ts
│ │ │ ├─ steam.ts
│ │ │ ├─ types.ts
│ │ │ ├─ utils.ts
│ │ │ └─ wegame.ts
│ │ ├─ singbox/
│ │ │ ├─ config.ts
│ │ │ ├─ constants.ts
│ │ │ ├─ index.ts
│ │ │ ├─ installer.ts
│ │ │ └─ utils.ts
│ │ ├─ category.ts
│ │ ├─ database.ts
│ │ ├─ game-scanner.ts
│ │ ├─ game.ts
│ │ ├─ node.ts
│ │ ├─ process.ts
│ │ ├─ proxy-monitor.ts
│ │ ├─ system.ts
│ │ └─ updater.ts
│ └─ utils/
│ ├─ command.ts
│ ├─ id.ts
│ ├─ ping.ts
│ └─ port.ts
├─ public/
│ ├─ logo.ico
│ ├─ logo.png
│ └─ logo.svg
├─ shared/
│ ├─ types/
│ │ ├─ category.ts
│ │ ├─ game.ts
│ │ ├─ index.ts
│ │ ├─ node.ts
│ │ ├─ settings.ts
│ │ └─ singbox.ts
│ └─ utils/
│ ├─ format.ts
│ ├─ index.ts
│ ├─ ipc-safe.ts
│ ├─ node-key.ts
│ ├─ process-name.ts
│ └─ sleep.ts
├─ src/
│ ├─ api/
│ ├─ assets/
│ ├─ autoImport/
│ ├─ components/
│ │ ├─ common/
│ │ ├─ dashboard/
│ │ ├─ library/
│ │ ├─ node/
│ │ ├─ settings/
│ │ └─ singbox/
│ ├─ composables/
│ ├─ constants/
│ ├─ layouts/
│ ├─ locales/
│ ├─ router/
│ ├─ stores/
│ ├─ types/
│ ├─ utils/
│ ├─ views/
│ │ ├─ dashboard/
│ │ ├─ library/
│ │ ├─ nodes/
│ │ ├─ settings/
│ │ └─ tray/
│ ├─ App.vue
│ ├─ i18n.ts
│ └─ main.ts
├─ tests/
│ └─ unit/
├─ package.json
├─ README.md
├─ uno.config.ts
├─ vite.config.ts
└─ vitest.config.ts
```
## 3. 关键目录职责
### `electron/`
Electron 主进程代码。这里负责:
- 应用启动与窗口生命周期
- 托盘窗口与主窗口通信
- IPC 注册
- 数据库存取
- 游戏扫描
- 系统命令、系统代理、TUN 与 DNS 控制
- sing-box 的安装、启动、停止、重启与日志转发
### `shared/`
跨进程共享层。这里应该只放“纯 TypeScript”代码:
- 公共类型
- 字符串/对象/数组等纯工具函数
- 进程名规范化、节点 key 计算、IPC 安全快照转换
如果一个文件需要同时在 `src/` 和 `electron/` 使用,优先考虑放到这里。
### `src/`
Vue 渲染进程代码。这里负责:
- 页面和组件
- Pinia 状态管理
- 路由组织
- i18n、多主题、样式
- sing-box 配置生成
- 通过 `src/api/` 调用 preload 暴露的主进程能力
### `tests/unit/`
Vitest 单元测试目录,当前重点覆盖:
- 配置生成
- 扫描工具
- 协议解析
- 代理监控
- UI 主题和局部业务逻辑
## 4. 重点文件速查
| 文件 | 作用 |
| --- | --- |
| `electron/main/index.ts` | 主进程总入口,服务实例化和 IPC 汇总注册 |
| `electron/preload/index.ts` | ContextBridge 暴露层,定义 `window.*` API |
| `src/main.ts` | 渲染进程入口,挂载 router/pinia/i18n,并处理主窗口初始化逻辑 |
| `src/router/index.ts` | 主窗口与托盘窗口路由定义 |
| `src/stores/games.ts` | 游戏加速主流程入口 |
| `src/stores/nodes.ts` | 节点管理、测速、订阅刷新与导入导出 |
| `src/stores/local-proxy.ts` | 本地代理自动选点、健康检查与自动恢复 |
| `src/stores/settings.ts` | 绝大多数设置项的持久化来源 |
| `src/utils/singbox-config.ts` | sing-box 配置生成核心 |
| `electron/services/database.ts` | SQLite 与业务数据落库核心 |
## 5. 推荐阅读顺序
### 想看应用怎么启动
1. `electron/main/index.ts`
2. `electron/main/window.ts`
3. `electron/preload/index.ts`
4. `src/main.ts`
### 想看加速链路怎么跑通
1. `src/views/dashboard/index.vue`
2. `src/stores/games.ts`
3. `src/utils/singbox-config.ts`
4. `electron/services/singbox/index.ts`
5. `electron/services/proxy-monitor.ts`
### 想看节点与订阅
1. `src/views/nodes/index.vue`
2. `src/stores/nodes.ts`
3. `electron/services/node.ts`
4. `electron/services/database.ts`
### 想看游戏扫描
1. `src/composables/useGameScanner.ts`
2. `electron/services/game-scanner.ts`
3. `electron/services/scanners/*.ts`