feat: 提交一下
This commit is contained in:
153
桌面应用打包简版指南.md
Normal file
153
桌面应用打包简版指南.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# 桌面应用打包简版指南
|
||||
|
||||
## 一句话总结
|
||||
|
||||
技术栈:`React 前端 + Python FastAPI 后端 + Electron 外壳 + electron-builder 安装包`
|
||||
|
||||
用户双击桌面图标 → Electron 启动 → 自动拉起后端 → 窗口加载后端页面。
|
||||
|
||||
---
|
||||
|
||||
## 打包前准备
|
||||
|
||||
### 1. 安装依赖
|
||||
|
||||
```powershell
|
||||
# 前端依赖
|
||||
cd chatlab-web/frontend
|
||||
npm install
|
||||
|
||||
# Electron 依赖
|
||||
cd ../../electron-launcher
|
||||
npm install
|
||||
|
||||
# Python 依赖
|
||||
cd ../chatlog_fastAPI
|
||||
py -3.12 -m pip install -r requirements.txt
|
||||
py -3.12 -m pip install pyinstaller
|
||||
```
|
||||
|
||||
### 2. 确认文件齐全
|
||||
|
||||
- `chatlog.exe` 存在于项目根目录
|
||||
- `lib/windows_x64/wx_key.dll` 存在
|
||||
- Node.js、Python 3.12 可用
|
||||
|
||||
---
|
||||
|
||||
## 一键打包
|
||||
|
||||
```powershell
|
||||
cd 项目根目录
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\build-desktop.ps1
|
||||
```
|
||||
|
||||
这个脚本会依次完成:
|
||||
1. 生成应用图标
|
||||
2. 构建 React 前端(`npm run build`)
|
||||
3. 用 PyInstaller 打包 Python 后端
|
||||
4. 复制所有资源到 `electron-launcher/build-resources/`
|
||||
5. 扫描敏感文件(.env、证书、数据库等自动排除)
|
||||
6. 调用 electron-builder 生成 NSIS 安装包
|
||||
7. 输出到 `release/` 目录
|
||||
|
||||
最终产物:`release/ChatLab-Setup-版本号.exe`
|
||||
|
||||
---
|
||||
|
||||
## 调试时跳过某些步骤
|
||||
|
||||
```powershell
|
||||
# 只改前端,跳过后端打包
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\build-desktop.ps1 -SkipBackend
|
||||
|
||||
# 只改后端,跳过前端构建
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\build-desktop.ps1 -SkipFrontend
|
||||
|
||||
# 只准备资源,不生成安装包
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\build-desktop.ps1 -SkipInstaller
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 打包流程原理
|
||||
|
||||
```
|
||||
scripts/build-desktop.ps1(总控脚本)
|
||||
│
|
||||
├── Vite 构建前端 → chatlab-web/frontend/dist/
|
||||
│
|
||||
├── PyInstaller 打包后端 → chatlog_fastAPI/dist/ChatLabBackend/
|
||||
│
|
||||
├── 复制所有资源到 build-resources/
|
||||
│ ├── frontend/(前端静态文件)
|
||||
│ ├── backend/(Python 后端 exe + _internal/)
|
||||
│ ├── chatlog.exe(微信数据服务)
|
||||
│ └── lib/windows_x64/wx_key.dll
|
||||
│
|
||||
└── electron-builder 打包 → release/安装包
|
||||
```
|
||||
|
||||
**核心原则:**
|
||||
- 运行期必须作为真实文件存在的内容(exe、DLL、前端 dist)走 `extraResources`,不进 asar
|
||||
- 用户数据写 `%APPDATA%/ChatLab`,不写安装目录
|
||||
- Electron 主进程只负责窗口和进程管理,不承载业务逻辑
|
||||
|
||||
---
|
||||
|
||||
## 安装后的目录结构
|
||||
|
||||
```
|
||||
安装目录/
|
||||
ChatLab售后智能助手.exe
|
||||
resources/
|
||||
app.asar ← Electron 主程序
|
||||
backend/
|
||||
ChatLabBackend.exe ← Python 后端
|
||||
_internal/
|
||||
frontend/
|
||||
index.html ← React 页面
|
||||
assets/
|
||||
chatlog.exe ← 微信数据服务
|
||||
lib/windows_x64/
|
||||
wx_key.dll
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 签名打包(正式发布)
|
||||
|
||||
```powershell
|
||||
$env:CHATLAB_PFX_FILE = "D:\certs\ChatLab-CodeSigning.pfx"
|
||||
$env:CHATLAB_PFX_PASSWORD = "证书密码"
|
||||
$env:CHATLAB_FORCE_SIGN = "1"
|
||||
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\build-desktop.ps1
|
||||
```
|
||||
|
||||
注意事项:
|
||||
- 证书不要放项目目录
|
||||
- 密码不要写进代码仓库
|
||||
- 签名可显著降低 SmartScreen 拦截概率
|
||||
|
||||
---
|
||||
|
||||
## 打包后验证
|
||||
|
||||
1. 检查 `release/` 下安装包是否生成
|
||||
2. 在干净 Windows 机器上安装测试
|
||||
3. 确认双击启动 → 后端启动 → 页面正常加载
|
||||
4. 确认关闭后无残留进程
|
||||
5. 确认用户数据在 `%APPDATA%/ChatLab`
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
| 问题 | 原因 | 解决 |
|
||||
|---|---|---|
|
||||
| 前端空白 | 前端 dist 没复制到 build-resources | 检查 `build-resources/frontend/index.html` 是否存在 |
|
||||
| 后端启动失败 | PyInstaller 缺少 hidden imports | 检查 `.spec` 文件,补充缺失模块 |
|
||||
| 找不到 exe/DLL | 资源没复制或被打进 asar | 外部 exe/DLL 必须走 `extraResources` |
|
||||
| 关闭后残留进程 | 只杀了父进程没杀子进程树 | 使用 `taskkill /pid /f /t` |
|
||||
| 客户电脑提示风险 | 安装包未签名 | 使用代码签名证书 |
|
||||
Reference in New Issue
Block a user