feat: 日志模块 + netRequest 封装 + PROJECT.md 更新
日志模块(文件持久化 + 事件总线联动 + 脱敏)
新增:
- shared/types/logging.ts — LogLevel / LogCategory / LogEntry 类型
- electron/main/logger.ts — 主进程日志核心(JSON Lines / 每日轮转 / 7天清理)
- electron/main/log-ipc.ts — 渲染进程日志 IPC 通道接收
- src/utils/logger.ts — 渲染进程日志器(IPC 转发 / DEV 控制台 / 事件总线钩子)
- shared/utils/sanitize.ts — 脱敏工具(ID哈希 / 邮箱 / 手机 / 名称 / Token)
修改:
- electron/main.ts — initLogger + flushLogger + uncaughtException
- src/main.tsx — renderer 全局错误捕获
- src/utils/event-bus.ts — setEventLogListener 钩子,emit 自动审计
- src/services/request.ts — 拦截器结构化错误分级记录
- electron/main/updater.ts — 14处 console → logger 迁移
- src/components/AppProvider.tsx — 登录/登出/自动登录 auth 事件日志
- shared/constants/ipc-channels.ts — 新增 LOG_MESSAGE 通道
netRequest 封装(Electron net.request 的 axios 风格 API)
新增:
- electron/main/net-request.ts — netRequest.get/post/put/del 命名空间
修改:
- electron/main/updater.ts — fetchUpdateInfo 改用 netRequest(22→12行)
文档更新
- PROJECT.md — 目录结构 / 状态管理 / 日志系统 / IPC 章节同步现状
- TODO.md — 增量更新改造 + 日志模块待办
- UpdateA.md — API blockmap 字段 / 数据库字段说明
This commit is contained in:
68
UpdateA.md
68
UpdateA.md
@@ -13,20 +13,25 @@
|
||||
│ 版本检查 ─────────┼────────▶│ /api/v1/update/ │ │ │
|
||||
│ │ │ check │ │ │
|
||||
│ │◀────────│ 返回 JSON │ │ │
|
||||
│ │ │ (含 blockmap 信息) │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ 下载安装包 ───────┼─────────┼──────────────────┼────────▶│ 静态文件托管 │
|
||||
│ │◀────────┼──────────────────┼─────────│ .exe / .dmg │
|
||||
│ 增量下载(未来)────┼─────────┼──────────────────┼────────▶│ 静态文件托管 │
|
||||
│ 仅下载变化块 │◀────────┼──────────────────┼─────────│ .exe + .blockmap │
|
||||
│ │ │ │ │ │
|
||||
│ 安装 (spawn) │ │ │ │ │
|
||||
│ 本地重建安装包 │ │ │ │ │
|
||||
│ 校验 SHA512 │ │ │ │ │
|
||||
│ NSIS /S 静默安装 │ │ │ │ │
|
||||
│ → app.quit() │ │ │ │ │
|
||||
└──────────────────┘ └──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
> **当前状态**:客户端为全量下载(`net.request` 下载完整 .exe)。`electron-builder` 打包已生成 `.exe.blockmap` 文件(`"differential": true`),但客户端尚未使用。**增量下载**(electron-updater 自定义 Provider)为规划中的优化。
|
||||
|
||||
| 角色 | 技术 | 职责 |
|
||||
|-----|--------------------|---------------------------------|
|
||||
| 客户端 | Electron + `axios` | 调用 API → 下载安装包 → 校验 SHA512 → 安装 |
|
||||
| ECS | 任意后端语言 | 提供版本检查 API |
|
||||
| OSS | 阿里云对象存储 | 托管 .exe / .dmg / .AppImage |
|
||||
| 客户端 | Electron + electron-updater | 调用 API → 下载 blockmap → 差分下载 → 重建 → 校验 → 安装 |
|
||||
| ECS | 任意后端语言 | 提供版本检查 API(含 blockmap 信息) |
|
||||
| OSS | 阿里云对象存储 | 托管 .exe / .dmg / .AppImage + .blockmap |
|
||||
|
||||
---
|
||||
|
||||
@@ -87,9 +92,10 @@ npm run build:win && npm run build:win:enterprise
|
||||
|
||||
# 4. 产物在 release/0.1.0/ 下:
|
||||
# - xxx-Setup.exe(安装包)
|
||||
# - xxx-Setup.exe.blockmap(块映射,增量更新用)
|
||||
# - xxx-update-info.json(所有 API 字段,downloadUrl 为预判 URL)
|
||||
|
||||
# 5. 手动上传 exe 到 OSS releases/0.1.0/
|
||||
# 5. 手动上传 exe + .blockmap 到 OSS releases/0.1.0/
|
||||
# 6. 将 update-info.json 内容录入数据库 releases 表
|
||||
```
|
||||
|
||||
@@ -165,6 +171,8 @@ CSC_LINK=/path/to/cert.pfx CSC_KEY_PASSWORD=xxx npm run build:win
|
||||
"downloadUrl": "https://heixiu.oss-cn-hangzhou.aliyuncs.com/releases/0.1.0/xxx.exe",
|
||||
"fileSize": 98765432,
|
||||
"sha512": "Base64...",
|
||||
"blockMapUrl": "https://heixiu.oss-cn-hangzhou.aliyuncs.com/releases/0.1.0/xxx.exe.blockmap",
|
||||
"blockMapSize": 152340,
|
||||
"changelog": "更新日志...",
|
||||
"releaseDate": "2026-06-03",
|
||||
"forceUpdate": false,
|
||||
@@ -173,6 +181,13 @@ CSC_LINK=/path/to/cert.pfx CSC_KEY_PASSWORD=xxx npm run build:win
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|:--:|------|
|
||||
| `blockMapUrl` | string | 否 | blockmap 文件 OSS 地址(客户端未支持增量时可不传,传了也不影响) |
|
||||
| `blockMapSize` | number | 否 | blockmap 文件字节数 |
|
||||
|
||||
> **向后兼容**:`blockMapUrl` / `blockMapSize` 为可选字段。旧版客户端不关心增量更新;新版客户端检测到有 `blockMapUrl` 时启用增量下载,缺失时回退全量下载。
|
||||
|
||||
**无更新**:
|
||||
|
||||
```json
|
||||
@@ -194,6 +209,8 @@ CSC_LINK=/path/to/cert.pfx CSC_KEY_PASSWORD=xxx npm run build:win
|
||||
"downloadUrl": "https://...",
|
||||
"fileSize": 112910987,
|
||||
"sha512": "Base64...",
|
||||
"blockMapUrl": "https://...",
|
||||
"blockMapSize": 152340,
|
||||
"changelog": "...",
|
||||
"releaseDate": "2026-06-03",
|
||||
"forceUpdate": false,
|
||||
@@ -210,26 +227,30 @@ CSC_LINK=/path/to/cert.pfx CSC_KEY_PASSWORD=xxx npm run build:win
|
||||
```sql
|
||||
CREATE TABLE releases
|
||||
(
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
platform VARCHAR(10) NOT NULL COMMENT 'win32 / darwin / linux',
|
||||
edition VARCHAR(10) NOT NULL COMMENT 'personal / enterprise',
|
||||
version VARCHAR(20) NOT NULL COMMENT '三段式 semver',
|
||||
file_url VARCHAR(500) NOT NULL COMMENT 'OSS HTTPS 地址',
|
||||
file_size BIGINT NOT NULL COMMENT '字节数',
|
||||
sha512 VARCHAR(128) NOT NULL COMMENT 'Base64 编码',
|
||||
changelog TEXT,
|
||||
force_update TINYINT(1) DEFAULT 0,
|
||||
min_version VARCHAR(20) DEFAULT '',
|
||||
release_date DATE NOT NULL,
|
||||
status VARCHAR(10) DEFAULT 'draft' COMMENT 'draft / published / deprecated',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
platform VARCHAR(10) NOT NULL COMMENT 'win32 / darwin / linux',
|
||||
edition VARCHAR(10) NOT NULL COMMENT 'personal / enterprise',
|
||||
version VARCHAR(20) NOT NULL COMMENT '三段式 semver',
|
||||
file_url VARCHAR(500) NOT NULL COMMENT '安装包 OSS HTTPS 地址',
|
||||
file_size BIGINT NOT NULL COMMENT '安装包字节数',
|
||||
sha512 VARCHAR(128) NOT NULL COMMENT '安装包 SHA512 Base64',
|
||||
blockmap_url VARCHAR(500) COMMENT 'blockmap 文件 OSS 地址(增量更新用,可为空)',
|
||||
blockmap_size BIGINT COMMENT 'blockmap 文件字节数',
|
||||
changelog TEXT,
|
||||
force_update TINYINT(1) DEFAULT 0,
|
||||
min_version VARCHAR(20) DEFAULT '',
|
||||
release_date DATE NOT NULL,
|
||||
status VARCHAR(10) DEFAULT 'draft' COMMENT 'draft / published / deprecated',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
|
||||
UNIQUE KEY uk_platform_edition_version (platform, edition, version),
|
||||
INDEX idx_platform_edition_status (platform, edition, status)
|
||||
);
|
||||
```
|
||||
|
||||
> **新字段说明**:`blockmap_url` 和 `blockmap_size` 为可选字段(DEFAULT NULL),不影响现有数据。首次发版时无需回填历史数据——客户端检测到字段为空时自动回退全量下载。
|
||||
|
||||
---
|
||||
|
||||
## 七、客户端行为
|
||||
@@ -274,12 +295,13 @@ ele-heixiu/
|
||||
├ package.json ← 仅保留简短的 npm 快捷命令
|
||||
├ scripts/
|
||||
│ ├ clean.mjs ← 清理产物
|
||||
│ ├ generate-update-info.mjs ← 生成 API 信息 JSON
|
||||
│ ├ upload-oss.mjs ← 上传 OSS
|
||||
│ ├ generate-update-info.mjs ← 生成 API 信息 JSON(含 blockmap 信息)
|
||||
│ ├ upload-oss.mjs ← 上传 OSS(安装包 + blockmap)
|
||||
│ └ publish-release.mjs ← 发布到 API(axios)
|
||||
├ release/ ← 构建产物目录(按版本分)
|
||||
│ └ 0.1.0/
|
||||
│ ├ xxx-Setup.exe
|
||||
│ ├ xxx-Setup.exe.blockmap ← 差分更新块映射文件
|
||||
│ └ xxx-update-info.json
|
||||
├ dist/ ← Vite 前端产物(构建输入)
|
||||
└ dist-electron/ ← Electron 主进程产物(构建输入)
|
||||
|
||||
Reference in New Issue
Block a user