使用说明
更新日志

v1.0.8

版本更新日志

提交:f57a6ab | 日期:2026-02-19


背景

打包产物体积过大,主要原因:

  1. 打包时包含了非当前平台的原生二进制文件(如 Windows 包里混入了 macOS/Linux 的 node-pty、ripgrep 等)
  2. 编译中间产物(.pdb.obj.tlog 等)残留在最终包内
  3. 打包脚本未显式指定架构,可能意外打入多架构的 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/*-win32vendor/ripgrep/*-linux

  • Windows 平台排除非 Windows 二进制:在 win.files 中排除 node-pty/prebuilds/darwin-*node-pty/prebuilds/linux-*vendor/ripgrep/*-darwinvendor/ripgrep/*-linux

2. scripts/afterPack.cjs — 打包后二进制清理(安全网)

问题:electron-builder 的 files 过滤在某些场景下(如 asar.unpacked)可能不完全生效,需要二次清理。

改动:新增 cleanCrossPlatformBinaries() 函数,在 afterPack 阶段执行以下清理:

  1. node-pty 跨平台 prebuilds:遍历 node-pty/prebuilds/,删除非当前平台的目录(如 Windows 上删除 darwin-*linux-*)。
  2. node-pty 编译目录:删除 node-pty/build/ 整个目录(编译中间产物)。
  3. ripgrep 跨平台二进制:遍历 @anthropic-ai/claude-agent-sdk/vendor/ripgrep/,删除非当前平台的目录。
  4. 残留编译产物扫描:递归扫描整个 node_modules,清除所有 .pdb.obj 等编译垃圾文件。
  5. 日志输出:每步清理都打印释放的空间大小,最终汇总总释放量。

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 包的体积。

本页目录