Files
MailUI4Agents/client/electron/vite.config.ts
JianFeeeee be13ae5959 feat(webui): 界面加构建戳 —— 让"我这边改了没"变成可核对的
用户连续三轮说「webui 还没改」,而我每次都能证明部署是活的(入口 no-cache、
资源哈希 immutable、线上 bundle 与本地构建逐字节一致、无头浏览器实测生效)——
问题在于**隔着屏幕说不清对方的浏览器跑的是哪一份**。

现在界面里显示一行 `界面构建 <git短哈希>·<月日-时分>`(外观设置面板页脚):

- `vite.config.ts` 在构建时注入 `__BUILD_STAMP__`(git 短哈希 + 构建时刻)
- `BackgroundPicker` 渲染它,并带 title 说明格式
- 判据 4 条(vite 注入 / 组件渲染 / **产物里真的有** / 判据自检:正则不能匹配随便一段文本)

实测:产物与线上都是 `d2904fc·0914-0910`;刷新后数字变了就是拿到了新构建。

顺带修正一处过时文案:图片说明还写着"保存在本机",而它现在同时存到账号里
(服务端 + 本地缓存)。

前端 254 条 + 新增 4 条、打包一致性、server 10 包全绿;桌面包已重打。
2026-09-14 09:11:36 +08:00

50 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { execSync } from 'node:child_process';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
/**
* 构建戳:界面上要能一眼看出"我现在跑的是哪一次构建"。
*
* 加它的直接原因:用户连续三轮说"webui 还没改",而每次我都能证明部署是活的 ——
* 问题在于浏览器拿的是哪份 bundle隔着屏幕谁也说不清。有了这行字
* 看一眼就知道自己是不是旧的那份(配套:入口页 no-cache、资源哈希 immutable
*/
const BUILD_STAMP = (() => {
let sha = 'unknown';
try {
sha = execSync('git rev-parse --short HEAD', { cwd: __dirname }).toString().trim();
} catch {
// 无 git打包环境等留 unknown不影响构建
}
const t = new Date();
const pad = (n: number) => String(n).padStart(2, '0');
return `${sha}·${pad(t.getMonth() + 1)}${pad(t.getDate())}-${pad(t.getHours())}${pad(t.getMinutes())}`;
})();
export default defineConfig({
plugins: [react()],
define: { __BUILD_STAMP__: JSON.stringify(BUILD_STAMP) },
// ★ 必须是相对路径。
//
// 同一份 `dist/` 有两个宿主:网关在 `/` 下伺服它WebElectron 用
// `loadFile()` 从 **file:///…/dist/index.html** 加载它(桌面)。
// Vite 的默认 base 是 `/`,产物里写的是 `/assets/index-xxx.js` ——
// 在 file:// 下它会解析成 `file:///assets/index-xxx.js`(不存在),
// 于是 **Electron 应用白屏**`#root` 里一个子节点都没有,
// 而且加载失败只以一条资源错误出现,看起来像「应用没起来」。
//
// 相对路径两边都对Web 在 `/index.html` 里 `./assets/x.js` → `/assets/x.js`
// Electron 在 `dist/index.html` 里 `./assets/x.js` → `dist/assets/x.js`。
base: './',
server: {
port: 5173,
proxy: {
// Gateway 默认监听 8180与 config.Load() 的 PORT 默认值一致)
'/api': {
target: 'http://localhost:8180',
changeOrigin: true
}
}
}
});