Skip to content

0.4.0 —— 配置损坏不再静默丢数据

Choose a tag to compare

@BOWLUNA BOWLUNA released this 24 Sep 05:42

配置坏了不再静默丢数据,外加一个能自己跑的图片资产护栏。

修了一个会吃掉配置的缺陷(P1)

读不出 config.json 时,旧代码只打一行日志、按空配置继续 —— 而紧接着任何一次写入都会用这份空配置把原文件覆盖掉:没有备份、没有残片,实例列表和窗格排布就此消失。

探针实测(修复前):损坏的残片 32 字节 → 一次 set()(比如改个主题)之后,主文件变成 38 字节的新内容,目录里只有 config.json 一个文件,没有任何东西可以回退。

现在:

  • 每次覆盖前,把上一位能解析的内容滚成 config.json.bak-1(旧的往后推,保留 3 份)
  • 读不出来时,先把手上的残片原样存成 config.json.corrupt-<时间戳>,再从最近的备份回退,并把回退结果写回主文件(自愈)
  • 两件事都写进 logs/main.log —— 以前它走的是 console.error,打包版里根本看不见
  • 备份链只收能解析的内容:一次坏盘不会把好备份一路挤掉,让「回退」退到另一个坏文件上

复验(修复后):坏盘 + 无备份 → 残片字节级保留,可手工抢救;坏盘 + 有 bak-1 → 实例列表原样回来。

npm 入口能回答最基础的两个问题

dsh-multi-instance --version   # 装成了什么
dsh-multi-instance --help      # 全部开关

这两条不需要 Electron(参数解析排在「找运行时」之前)—— 装完包的第一个动作不该先撞上「找不到运行时」。之前它们会被当成 Electron 参数透传,什么都不打印。

护栏

  • tools/check-binary-assets.js + CI 步骤:读 magic number 复验 *.png / *.ico。来历是这个项目真把 README 的图当文本处理坏过(d8eb824)。已用一份 base64 文本伪装的 PNG 验证过它确实会红 —— 那正是那次事故的签名。
  • .gitattributes:显式声明二进制资产。git 的自动检测只在新文件被 add 时生效,挡不住 patch / API 通道。

仓库

  • 落地页:https://bowluna.github.io/dsh-multi-instance/(docs/index.html,单文件、无外部依赖)
  • 徽章行以 Release 版本为准(npm 徽章移到末位并标注 placeholder —— 之前首页显示的是 npm 上那个 0.0.1 占位包)
  • 关掉空置的 Wiki / Projects 标签;合并后自动删分支;electron 家族依赖每周汇总成一个 Dependabot PR

测试

npm test:36 条 → 54 条(新增 13 条覆盖配置的读写 / 备份轮转 / 损坏回退 / 残片保留,5 条覆盖 CLI 参数解析)。零依赖、纯 Node,不需要图形界面。

下载

文件 说明
DSH Multi-Instance-Setup-0.4.0.exe 安装包 —— 可选安装目录,建桌面与开始菜单快捷方式
DSH Multi-Instance-0.4.0-x64.zip 免安装压缩包 —— 解压即用,不写注册表

需要 Windows 10/11。软件本身不含 dsh —— 装完在界面里点「下载实例」,或者接你已有的 DSH。

⚠️ npm 上现在仍然只有 0.0.1(占位空壳)。可用版本还没发上去,在那之前请用上面的产物。
想确认拿到的是不是真包:npm view dsh-multi-instance version 现在会返回 0.0.1。

实测记录(本轮踩到的另一件事)

打包在解包阶段就会失败,dist/ 里一个产物都没有 —— 起因是工具沙箱注入的批量删除守卫拦下了 electron-builder 解包前对 dist/win-unpacked 的删除。README 里原先那句「收尾清理报删除失败可以忽略,产物已生成」是错的,中英双侧已更正,并新增 npm run clean:dist(挂在 predist 钩子上,用同步 API 提前清目录)绕开它。

完整改动:CHANGELOG.md · 安装与排障:README