更新日志
v1.0.8
版本更新日志
提交:
f57a6ab| 日期:2026-02-19
背景
打包产物体积过大,主要原因:
- 打包时包含了非当前平台的原生二进制文件(如 Windows 包里混入了 macOS/Linux 的 node-pty、ripgrep 等)
- 编译中间产物(
.pdb、.obj、.tlog等)残留在最终包内 - 打包脚本未显式指定架构,可能意外打入多架构的 native modules
变更文件清单
| 文件 | 变更类型 | 说明 |
|---|---|---|
electron-builder.yml | 修改 | 新增全局和平台级文件过滤规则 |
scripts/afterPack.cjs | 修改 | 新增 afterPack 阶段的跨平台二进制清理逻辑 |
scripts/package-win.ps1 | 修改 | 默认指定 x64 架构,避免打入多架构模块 |
package-lock.json | 修改 | claude-agent-sdk 升级 0.2.31→0.2.45;依赖树 peer 标记调整 |
具体改动
1. electron-builder.yml — 文件过滤规则
问题:之前没有全局文件排除规则,编译产物和跨平台二进制全部打入包内。
改动:
-
全局排除编译产物:新增顶层
files字段,排除.pdb、.obj、.iobj、.ipdb、.tlog、.exp、.lastbuildstate、.recipe等编译中间文件,以及node-pty/build/整个编译目录。 -
macOS 平台排除非 macOS 二进制:在
mac.files中排除node-pty/prebuilds/win32-*、node-pty/prebuilds/linux-*、vendor/ripgrep/*-win32、vendor/ripgrep/*-linux。 -
Windows 平台排除非 Windows 二进制:在
win.files中排除node-pty/prebuilds/darwin-*、node-pty/prebuilds/linux-*、vendor/ripgrep/*-darwin、vendor/ripgrep/*-linux。
2. scripts/afterPack.cjs — 打包后二进制清理(安全网)
问题:electron-builder 的 files 过滤在某些场景下(如 asar.unpacked)可能不完全生效,需要二次清理。
改动:新增 cleanCrossPlatformBinaries() 函数,在 afterPack 阶段执行以下清理:
- node-pty 跨平台 prebuilds:遍历
node-pty/prebuilds/,删除非当前平台的目录(如 Windows 上删除darwin-*、linux-*)。 - node-pty 编译目录:删除
node-pty/build/整个目录(编译中间产物)。 - ripgrep 跨平台二进制:遍历
@anthropic-ai/claude-agent-sdk/vendor/ripgrep/,删除非当前平台的目录。 - 残留编译产物扫描:递归扫描整个
node_modules,清除所有.pdb、.obj等编译垃圾文件。 - 日志输出:每步清理都打印释放的空间大小,最终汇总总释放量。
3. scripts/package-win.ps1 — 默认指定 x64 架构
问题:之前 $archArg 为空时不传架构参数,electron-builder 可能按当前系统架构打包,导致在 ARM 机器上意外打入 arm64 native modules。
改动:
$archArg默认值从空改为"x64",确保 Windows 打包始终指定明确架构。- 简化条件判断逻辑,
--$archArg始终传入 electron-builder。
4. package-lock.json — 依赖更新
@anthropic-ai/claude-agent-sdk:从0.2.31升级到0.2.45,registry 切换到 npmmirror。- 多个依赖的
peer标记调整(archiver、electron-builder 相关模块等),属于依赖树自动解析变化,不影响运行时行为。
效果
通过以上改动,打包产物中不再包含:
- 非当前平台的 node-pty prebuilds(约数十 MB)
- 非当前平台的 ripgrep 二进制
- C++ 编译中间产物(.pdb/.obj 等)
- node-pty 的 build 编译目录
最终显著降低了安装包和 zip 包的体积。