Skip to content

v1.1.2

Choose a tag to compare

@github-actions github-actions released this 16 Oct 03:27
· 8 commits to main since this release

修复

  • 重启 Harness 之后部件显示「今日暂无用量」,余额也读不出来。

    这两个症状是同一个根因:宿主半边没有声明它要用的服务。

    插件在 apply() 里读取 ctx.webServer 来注册汇总路由,却没有把这个服务写进 inject。Cordis 对未声明的服务读取会直接抛错(cannot get property "webServer" without inject),而这段读取被 try/catch 吞掉,于是路由静默地从未注册。客户端拿不到任何数据,用量显示空、余额也显示失败。

    为什么安装时是好的、重启后才坏:

    场景 结果
    安装/热重载(Web 服务已在运行) 服务已就绪,读取成功,路由注册 —— 看起来正常
    冷启动(重启 Harness) apply() 先于服务可见时执行,读取被拒,路由从未注册 —— 部件失效

    修复方式是声明依赖 export const inject = ['webServer'],让 Cordis 等到服务就绪后再启用这一半;同时把原本被吞掉的失败改成显式报错,避免同类问题再次静默发生。

  • 新增宿主半边的回归测试(test/host-smoke.mjs,9 项):用模拟 Cordis 服务规则的假上下文,未声明 inject 会直接让测试失败,同时覆盖路由的方法限制、回环 Host 校验、跨站 Origin 拒绝、正常响应与卸载释放。

验证

除三套测试(11 + 9 + 9)外,另用真实的 Cordis 4.0.4 运行时复现了冷启动时序,三个场景全部符合预期:

  • 先加载插件、后提供服务 → 路由在服务出现时注册(修复后的行为)
  • 去掉 inject → 激活被拒,抛出 cannot get property "webServer" without inject,路由始终不存在(原 bug 精确复现)
  • 服务在加载时已就绪 → 路由注册(热重载路径,解释了为何安装时正常)

安装

dsh plugin --profile desktop add "https://github.com/ZeroOT-Liu/dsh-usage-widget/releases/latest/download/dsh-usage-widget.tgz"

升级后需要重启 Harness(宿主半边的改动不会被热重载拾取),然后刷新页面(Ctrl+R)。

完整变更:v1.1.1...v1.1.2