chore(dev): 新增 Windows 本地实时预览脚本 win:dev (不打包)
Docker Build and Push / build-image (push) Successful in 2m31s
Docker Build and Push / build-image (push) Successful in 2m31s
改完前端 UI 想立刻在 Windows 外壳里看效果, 原本要 tauri build 打包。实际外壳 用 tauri-plugin-hotswap, 启动时优先读 %APPDATA%\<identifier>\hotswap\ 下的覆盖 包, 没有才回退 exe 内置 dist —— 与线上 OTA 同一条路径。因此只构建前端并写进 覆盖目录 + 重启外壳即可, 不编译 Rust、不打 NSIS/便携包、不重装。 npm run win:dev 构建(shell 模式) + 挂载 + 重启 npm run win:dev -- --no-build 复用现有 dist, 只挂载+重启 (~2s) npm run win:dev -- --clear 卸载覆盖, 回到内置前端 npm run win:dev -- --no-launch 只改覆盖目录, 不碰外壳进程 读插件源码得到的两个硬约束 (写错会被静默丢弃或启动即回滚), 脚本已处理: - min_binary_version 必须 == 外壳版本: 默认 DiscardOnUpgrade 在 binary > min 时 丢弃缓存, 而安全线又要求 binary >= min, 只能取等号; - confirmed 必须为 true: 默认 SingleLaunch 对未确认版本启动即回滚。 另: 目录名须为 seq-<数字>; sequence 取 Date.now() 让 OTA 检查认为已是最新, 避免线上更新顶掉本地版本。 README 补「Windows 本地实时预览(不打包)」章节: 用法/原理/约束表/注意事项。
This commit is contained in:
@@ -274,3 +274,47 @@ Web 端不会自动下载包,也不会替换前端代码。
|
||||
- 由于只有 `master` 会部署,**迁移真正作用到生产库的唯一时机就是 master 发布**;
|
||||
开发分支上的迁移不会被自动应用,请在合并到 `master` 前确认可回滚。
|
||||
- 本地改了 `prisma/schema.prisma` 后:写迁移 SQL → `npx prisma migrate deploy` 验证 → 提交迁移目录。
|
||||
|
||||
---
|
||||
|
||||
## Windows 本地实时预览(不打包)
|
||||
|
||||
改完前端 UI 想立刻在 **Windows 外壳**里看效果,不必 `tauri build`、不必打 NSIS/便携包、也不必重装。
|
||||
|
||||
```bash
|
||||
npm run win:dev # 构建(shell 模式) + 挂载 + 重启外壳
|
||||
npm run win:dev -- --no-build # 复用现有 dist, 只挂载+重启 (最快, 约 2 秒)
|
||||
npm run win:dev -- --no-launch # 只挂载, 自己手动启动外壳
|
||||
npm run win:dev -- --exe "D:\path\iBoard.exe"
|
||||
npm run win:dev -- --clear # 卸载覆盖, 外壳回到内置前端
|
||||
```
|
||||
|
||||
### 原理
|
||||
|
||||
外壳用 `tauri-plugin-hotswap`,启动时**先看覆盖目录有没有生效的前端包,没有才回退到 exe 内置的 `dist`**。
|
||||
这和线上 OTA 走的是同一条路径,所以只要把新构建的 `dist` 写进覆盖目录再重启外壳即可:
|
||||
|
||||
```
|
||||
%APPDATA%\com.iboard.app\hotswap\
|
||||
current ← 文本文件, 内容为生效的目录名 (如 seq-1793068631298)
|
||||
seq-1793068631298\ ← 本次前端 (dist 内容) + hotswap-meta.json
|
||||
```
|
||||
|
||||
`hotswap-meta.json` 里有两个字段是**硬约束**,改错会导致覆盖包被丢弃或立刻回滚:
|
||||
|
||||
| 字段 | 取值 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| `min_binary_version` | **必须等于**外壳版本(当前 `0.2.1`) | 默认策略 `DiscardOnUpgrade` 在 `binary > min` 时丢弃缓存;安全线又要求 `binary >= min`,故只能取等号 |
|
||||
| `confirmed` | **必须为 `true`** | 默认策略 `SingleLaunch` 对未确认版本会在启动时立即回滚 |
|
||||
|
||||
另外 `sequence` 取 `Date.now()`(大值),让 OTA 检查认为"已是最新",避免线上更新把本地版本顶掉。
|
||||
|
||||
### 注意
|
||||
|
||||
- 覆盖目录就是外壳**真实的 OTA 落地目录**,挂载期间"我的"页会显示本地版本(`0.2.1-local`);
|
||||
测完建议 `npm run win:dev -- --clear` 复原,避免影响后续正常 OTA。
|
||||
- 脚本按 `src-tauri/tauri.conf.json` 的 `identifier` 推导覆盖目录,换 identifier 后无需改脚本。
|
||||
- 这只适用于**前端**改动。改了 `src-tauri/`(Rust/原生层、权限、CSP)必须重新打包外壳。
|
||||
- 想要带 HMR 的完整开发循环(改代码即时刷新、免手动重启)用 `npm run tauri:dev`,
|
||||
代价是首次要编译一次 debug 版 Rust 二进制。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user