dsh-harmony 使用指南
让一个 DSH 插件在运行时改写其它已安装插件的编译产物,而不必维护 fork。
本文为派生内容(基于 wiki / faq / compatibility_json 自动组装),非 AI 即时创作。
本文由本站基于该插件已收录的字段自动派生(wiki / faq / compatibility_json / readme),非 AI 即时创作。每节末尾标源字段。
快速上手
dsh-harmony
— 源: plugin_wiki.wiki_content
安装与验证
dsh plugin --profile web add dsh-harmony
复制以上命令在 DSH Web Profile 内运行。安装完成后在「插件列表」启用即可。
— 源: plugins.install
常见问题
dsh-harmony 是给普通用户用的还是给开发者用的?
两者都是。它给 WebUI 的"设置 → Harmony"页面、终端 TUI 和 CLI 命令,普通用户可以用它们查看、排序、启用或停用已注册的 Patch。给开发者,它提供 Source、Semantic、Loader 和 Composite 四类 Patch API,用来编写或审阅实际改写目标插件的代码。
安装后必须重启 DSH 才会生效吗?
是的。dsh-harmony 作为 DSH 插件安装时,宿主进程内的 Hook 不会自动启用,需要全局安装 dsh-harmony 让 DSH 通过它启动,或在 WebUI 中选择"安装并重启"。README 与 installer.ts 明确要求这一步,且不能在自身运行时内热重载 dsh-harmony 本身(plugin.ts:360/582/786)。
Patch 改写后的代码保存在哪里?
只存在于内存中,node_modules 里的安装文件不会被修改。Source Patch 通过 TSQuery 定位目标再用 MagicString 重写源码区间,Loader Patch 在模块加载前替换文件内容,运行时结束后原始文件仍逐字节保持不变(README.md:50-66、src/runtime.ts:34-45)。
一个 Patch 失败了会影响其他 Patch 或宿主启动吗?
不会。独立 Patch 失败时会被报告并跳过,后续 Patch 与 Host 仍照常运行(src/runtime.ts:319-326)。Composite(组合)Patch 内的任一成员失败时整体不应用,其它 Patch 不受影响(src/runtime.ts:497、315-360 测试)。
它是稳定 API 还是依赖内部细节?
依赖内部细节。Harmony 把已编译目标的内部组件、Loader 条目和编译后行为当作可改写对象,作者公开承认这不是稳定的公开 API,而是显式声明的、可排序、可检查、可回退的依赖(README.md:62、52-66)。
如何把某个 Patch 调整顺序或关闭它?
通过 WebUI(设置 → Harmony)、终端 TUI 或 dsh harmony patch-order move/enable/disable ... 命令调整。CLI 的 status、patch-order show、provider-order show 在健康或顺序约束失败时退出码为 1,便于脚本接入(src/bin.ts:60-67、209、379、449)。
卸载它会同时删除我安装的其它 DSH 插件吗?
不会。dsh harmony disable my-provider/... 只停用 Patch;卸载 dsh-harmony 本身通过 dsh plugin remove dsh-harmony 完成,其它插件与 Patch 设置都保留(src/bin.ts:90-92、src/plugin.ts:541-566)。
它对 React 组件做了什么特殊处理?
通过子包 dsh-harmony-react 提供 element() 与 component() 工厂,专门改写编译后的 jsx/jsxs 调用点与共享组件定义;其它 Source Patch 一样使用同一份全局顺序。声明为函数声明的组件会被改写为已初始化的 const,新绑定不再提升(packages/react/README、src/builtins/settings.patch.cts:13-84)。
— 源: plugin_wiki.faq_json
兼容性
- DSH: 0.1.0-rc.8 || 0.1.1-rc.1
- Node: ^22.22.3 || >=24.11.1
- Platforms: macOS, Windows, Linux
— 源: plugin_wiki.compatibility_json
踩坑提醒
安装前请审阅上游仓库;本指南基于已收录字段自动派生,可能滞后于最新版本。如发现与官方文档冲突,请以上游为准。
— 来源:通用规则