mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-15 12:15:16 +00:00
fix(gui): 修发行打包的图标与资源漏装(Linux 包会缺星图依赖)
## 背景 上一提交修了 electron-packager 那条路径的 exe 图标。本提交处理另外两处 同类问题——**都是静默失败**:改了没人知道,坏了要等用户装上才发现。 ## 1) package.json build 段(electron-builder 路径) · files 白名单漏了 icon.ico / icon-tray.png / icon-tray@2x.png ⇒ 这些文件不会被打进包,托盘与窗口图标在发行版里丢失 · 补 win.target/win.icon;注意 electron-builder 的 icon 路径相对 **项目目录**(package.json 所在)解析,不是相对输出目录 (最初写成 'build/icon.ico',那会找不到文件 —— 已用存在性判据钉住) · icon.ico 含 256x256,满足 electron-builder 对 win 图标的要求 ## 2) deploy/packaging/package-linux.sh(Linux 发行实际走这条) 原实现手工 cp 七个文件: main.js / preload.js / package.json renderer/{index.html, app.js, style.css, mascot.svg} 实测漏掉: · renderer/mascot.svg —— 源码里根本不存在(真名 mascot.webp) · icon.svg / icon.ico / icon-tray*.png · renderer/icon.svg · renderer/vendor/* ★★ 本次本地化新增的四个第三方库 (three/OrbitControls/marked/purify) ⇒ Linux 发行包装完星图与 Markdown 渲染直接坏, 且**没有任何构建报错** 改为: · renderer 按目录整体同步(cp -r "$gui_dir/renderer/.") · 根级 *.svg / *.ico / icon-tray*.png 同步 · 新增必备文件校验:vendor 四库与 icon.svg 缺任一 ⇒ 报错并删目录跳过, 沿用本脚本既有的"宁可不发,也不发装了跑不起来的包"原则 ## 判据 新增 cmd/gui/package-config.test.mjs(进 npm test),14 条断言覆盖三条 打包路径的配置一致性。已做变异测试:Makefile 去 --icon、files 去 icon.ico、 package-linux.sh 还原逐文件 cp,三者均判红。 判据:cmd/gui npm test 全绿(60 条)。
This commit is contained in:
@ -261,13 +261,43 @@ print(m.group(1) if m else '')
|
||||
rm -f "$gui_out/resources/default_app.asar" 2>/dev/null
|
||||
|
||||
# copy app source
|
||||
#
|
||||
# ★ 改成**按目录整体同步**,不再逐文件手列。
|
||||
#
|
||||
# 原实现手工 cp 七个文件,每加一个新文件就要记得补一行,漏了不会有
|
||||
# 任何报错,只会做出一个"装完缺东西"的包。已实际漏掉过:
|
||||
# · renderer/mascot.svg —— 源码里根本不存在(真名 mascot.webp)
|
||||
# · icon.svg / icon.ico / icon-tray*.png —— 托盘与窗口图标
|
||||
# · renderer/icon.svg
|
||||
# · renderer/vendor/* —— three/OrbitControls/marked/purify
|
||||
# (这四个是本地化后的第三方库,缺了 Linux 发行版的星图直接坏)
|
||||
#
|
||||
# 整体同步还顺带保证 .hmap 之外的任何新增资源都会进包。
|
||||
cp "$gui_dir/main.js" "$gui_out/resources/app/"
|
||||
cp "$gui_dir/preload.js" "$gui_out/resources/app/"
|
||||
cp "$gui_dir/package.json" "$gui_out/resources/app/"
|
||||
cp "$gui_dir/renderer/index.html" "$gui_out/resources/app/renderer/"
|
||||
cp "$gui_dir/renderer/app.js" "$gui_out/resources/app/renderer/"
|
||||
cp "$gui_dir/renderer/style.css" "$gui_out/resources/app/renderer/" 2>/dev/null || true
|
||||
cp "$gui_dir/renderer/mascot.svg" "$gui_out/resources/app/renderer/" 2>/dev/null || true
|
||||
cp "$gui_dir"/*.svg "$gui_out/resources/app/" 2>/dev/null || true
|
||||
cp "$gui_dir"/*.ico "$gui_out/resources/app/" 2>/dev/null || true
|
||||
cp "$gui_dir"/icon-tray*.png "$gui_out/resources/app/" 2>/dev/null || true
|
||||
|
||||
# renderer 整目录同步(含 vendor/ 与全部静态资源)
|
||||
cp -r "$gui_dir/renderer/." "$gui_out/resources/app/renderer/"
|
||||
|
||||
# ★ 必备文件校验:缺了就是"装完坏掉"的包,且不会有任何构建报错。
|
||||
# renderer/vendor 是本地化后的第三方库(three/OrbitControls/marked/purify),
|
||||
# 缺任何一份都会让星图或 Markdown 渲染在断网/离线环境下直接坏掉。
|
||||
local missing=""
|
||||
for _f in index.html app.js style.css vendor/three.min.js vendor/OrbitControls.js \
|
||||
vendor/marked.min.js vendor/purify.min.js; do
|
||||
[ -f "$gui_out/resources/app/renderer/$_f" ] || missing="$_f "
|
||||
done
|
||||
[ -f "$gui_out/resources/app/icon.svg" ] || missing="icon.svg "
|
||||
if [ -n "$missing" ]; then
|
||||
echo " ERROR: GUI 资源缺失:$missing"
|
||||
echo " 宁可不发,也不发装了跑不起来的包。"
|
||||
rm -rf "$gui_out"
|
||||
return
|
||||
fi
|
||||
|
||||
# production node_modules for app
|
||||
if [ -d "$gui_dir/node_modules" ]; then
|
||||
|
||||
Reference in New Issue
Block a user