说明:Diff 流程截图 1(在文件列表中触发 External Diff)。
- Windows
- Node.js + npm
- WebStorm(2024.2.x)
npm install本项目使用 electron-builder,输出目录为 dist_electron/。
压缩版通常体积更小,适合发给最终用户安装或直接运行。
NSIS 安装包(.exe)
npm run pack:nsisPortable 单文件(.exe)
npm run pack:win- 一次构建两种发布包(NSIS + Portable)
npm run dist非压缩目录版不打安装包,便于查看和定位打包产物内容。
npm run pack:unpacked- 安装包(压缩):
dist_electron/*.exe - Portable(压缩):
dist_electron/*.exe(执行npm run pack:win生成) - Unpacked(非压缩):
dist_electron/win-unpacked/
- 需要提交:
dist_electron/*.exe(发布给他人的安装包/便携包)。 - 不提交:
dist_electron/win-unpacked/以及临时打包目录(用于本地调试)。 - 建议流程:每次执行打包命令后,只挑选新的
.exe进入提交。
可在每次发布前后记录一次,便于持续优化包体积。
| 构建方式 | 命令 | 典型产物 | 体积(MB) | 适用场景 |
|---|---|---|---|---|
| NSIS 安装包(压缩) | npm run pack:nsis |
dist_electron/*.exe |
待填写 | 正式安装发布 |
| Portable 单文件(压缩) | npm run pack:win |
dist_electron/*.exe |
待填写 | 免安装分发、U盘携带 |
| Unpacked 目录(非压缩) | npm run pack:unpacked |
dist_electron/win-unpacked/ |
待填写 | 调试排查、文件核查 |
可用 PowerShell 快速查看体积:
Get-ChildItem dist_electron -File *.exe | Select-Object Name,@{N='SizeMB';E={[math]::Round($_.Length/1MB,2)}}- 对外正式发布:优先
NSIS,同时提供Portable作为免安装备选。 - 内部测试联调:优先
Portable,安装负担小、回归快。 - 定位打包问题:使用
Unpacked,可直接检查win-unpacked内文件是否完整。 - 每次发版至少保留一份
Unpacked构建结果,便于问题复现和比对。
- 执行
npm install,依赖完整且无中断。 - 执行
npm run build能成功通过(主进程 + 渲染进程)。 - 图标文件存在:
build/icon.ico。 - 额外资源存在:
resources/portable-git(打包后应进入resources/git)。 - 清理历史产物:
dist_electron/内旧文件不用于本次发版。
- 启动应用无白屏,主流程可用(打开文件、diff/merge、导出等关键路径)。
- 校验版本与名称(窗口标题、可执行文件名)符合发布预期。
- 校验资源目录:
resources/git已随包携带。 - 在未安装开发环境的干净机器上进行一次冒烟测试(推荐)。
npm run devdev:renderer会启动 webpack-dev-server,默认端口http://localhost:3000dev:main会以 watch 模式编译主进程 TS 到build/
调试流程与常见问题已迁移到单独文档:
docs/DEBUG_SETUP.md
用于在 Fork 中配置 eMerge 作为外部合并/对比工具。
- 已打包或可运行
eMerge.exe。 - 可执行文件路径可访问,例如:
E:\electron_excel\dist_electron\win-unpacked\eMerge.exe。
在 Fork 中打开 Settings -> Integration -> External Merge Tools,新增或编辑一项:
- Name:
eMerge - Path:
E:\electron_excel\dist_electron\win-unpacked\eMerge.exe - Arguments:
"$BASE" "$LOCAL" "$REMOTE" "$MERGED"
参数说明:
"$BASE":共同基线文件"$LOCAL":当前分支文件"$REMOTE":目标分支文件"$MERGED":输出合并结果文件
在 Fork 中打开 Settings -> Integration -> External Diff Tools,新增或编辑一项:
- Name:
eMerge - Path:
E:\electron_excel\dist_electron\win-unpacked\eMerge.exe - Arguments:
"$LOCAL" "$REMOTE"
参数说明:
"$LOCAL":当前版本文件"$REMOTE":对比版本文件
- 在文件列表中右键目标文件。
- 点击
External Diff。 - 选择
eMerge。
完整独立文档:docs/FORK_SETUP.md
Excel diff / merge 采用“先粗对齐,再细匹配,最后做三方分类”的思路:
- jsdiff 行级 diff(粗对齐):使用
diff(jsdiff)里的 Myers 序列算法,把每一行当作一个整体,先找出确定相同的行,以及新增/删除的变动块。 - 行相似度匹配(细对齐):在变动块内对“删除行”和“新增行”计算相似度(按单元格内容/相同列比例等),相似度高的行会被识别为“修改行”,而不是“删了又加”。
- 三方单元格分类:在行已经对齐之后,再基于
base / ours / theirs把单元格区分成ours-changed、theirs-changed、both-changed-same、conflict,用于驱动 UI 颜色和默认 merged 值。
这样既保留了 Myers 的速度与全局最短编辑优势,又能把改动行对齐到具体单元格,并让三方 merge 的默认行为更接近真实语义。



