插件 HMR 不工作
理解 DSH 的四种 HMR 模式,选择正确的模式并排查热更新失效的原因。
四种 HMR 模式
DSH 插件支持四种热更新模式,在 dsh.hub.compatibility.hmr 字段中声明:
full — 插件可以在不重启宿主进程的情况下应用和销毁。这是最高级别的 HMR,需要插件正确实现 apply 和 dispose 生命周期钩子。
config — 配置变更可以通过重新组合配置层来生效,无需完全卸载插件。
refresh — 需要刷新 web/客户端界面才能看到变更。
restart — 必须重启 DSH 进程才能加载变更。这是最低级别的兼容模式。
选择正确的模式
如果你的插件只修改配置,config 模式就够了。如果插件有 UI 组件,通常需要 refresh。只有当插件完全实现了运行时钩子时才能用 full。
声明比实际支持更高级的 HMR 模式会导致更新不生效或状态不一致。
{
"dsh": {
"hub": {
"compatibility": {
"hmr": "refresh"
}
}
}
}排查 HMR 失效
检查插件声明的 HMR 模式是否和实际行为匹配。如果声明了 full 但没有正确实现 dispose,旧实例可能不会清理。
确认 Cordis patch 中的 entry ID 没有冲突。多个插件注册相同 ID 时,后加载的会覆盖先加载的。
查看 DSH 日志中的 HMR 相关事件,确认变更是否被检测到。