Skip to content

dsh: peer 范围改成 || 写法,严格 semver 下也能匹配 0.2.x 预发布(latest 0.2.1-rc.5) - #4

Merged
KyoMio merged 1 commit into
mainfrom
fix/dsh-peer-range-prerelease
Oct 30, 2026
Merged

KyoMio merged 1 commit into
mainfrom
fix/dsh-peer-range-prerelease

Conversation

@kyomarshal

Copy link
Copy Markdown
Collaborator

问题

根 package.json 和 dsh-plugin/package.json 的 4 个 @deepseek-ai/dsh-* peer 写的是 >=0.1.7-rc.2 <0.3.0。按严格 semver(npm / pnpm 的 peer 校验默认不含预发布),带预发布号的版本只有和下限 0.1.7 同一个 [major, minor, patch] 时才算匹配,所以 0.2.0-rc.x、0.2.1-rc.x(当前 npm latest = 0.2.1-rc.5)、0.2.2-alpha.x 全都不匹配,装的时候会报 peer 不满足。

改动

只改 peer 范围,照 KyoMio/dsh-zen-remote 的 || 写法:

^0.1.7-rc.2 || ^0.2.0-rc.1 || ^0.2.1-alpha.1 || ^0.2.2-alpha.0
  • 4 个 peer × 2 个文件(根 package.json、dsh-plugin/package.json)。cordis / schemastery / react 和 peerDependenciesMeta 没动。
  • 和 zen 只差最后一段:zen 写的是 ^0.2.2-alpha.1,这里用 ^0.2.2-alpha.0,让 0.2.2-alpha.x 整段都能匹配上。
  • dsh-plugin/README.md(2 处)和 dsh-plugin/SPEC.md(1 处)写到旧范围的地方也一起改了。README 表格里的 | 做了转义。
  • 锁文件不用动:根目录没有锁文件;dsh-plugin/ 用 pnpm(packageManager: pnpm@11.7.0),pnpm-lock.yaml 里 autoInstallPeers: false,importer 不记录本包自己的 peer,所以改了也不影响锁文件。下面已用 pnpm install --frozen-lockfile 验证。没有新增其它锁文件。

semver 矩阵(semver 7.8.5,satisfies)

npm dist-tags(2026-10-30):latest = next = 0.2.1-rc.5,alpha = 0.2.2-alpha.2。

version old · strict new · strict old · includePrerelease new · includePrerelease
0.1.7-rc.1 ❌ ❌ ❌ ❌
0.1.7-rc.2 ✅ ✅ ✅ ✅
0.1.7 ✅ ✅ ✅ ✅
0.1.9 ✅ ✅ ✅ ✅
0.2.0-rc.1 ❌ ✅ ✅ ✅
0.2.0-rc.2 ❌ ✅ ✅ ✅
0.2.0 ✅ ✅ ✅ ✅
0.2.1-alpha.1 ❌ ✅ ✅ ✅
0.2.1-rc.2 ❌ ✅ ✅ ✅
0.2.1-rc.5 ❌ ✅ ✅ ✅
0.2.1 ✅ ✅ ✅ ✅
0.2.2-alpha.0 ❌ ✅ ✅ ✅
0.2.2-alpha.2 ❌ ✅ ✅ ✅
0.2.2 ✅ ✅ ✅ ✅
0.2.9 ✅ ✅ ✅ ✅
0.3.0-alpha.1 ❌ ❌ ✅ ❌
0.3.0 ❌ ❌ ❌ ❌
  • strict 列对应 npm / pnpm 的 peer 校验。新范围覆盖了旧范围原本覆盖的所有版本,另外补上了 0.2.x 的预发布版本;0.3.0 仍然不匹配。
  • includePrerelease 列对应 dsh 宿主自己的兼容检查:dsh-app-boot 的 evaluatePluginCompatibility 用 semver.satisfies(..., { includePrerelease: true })。所以旧范围在宿主里其实一直是通过的,问题只出在包管理器这一层。唯一的行为差别是 0.3.0-alpha.x:旧范围在宿主里算兼容,新范围不算。这和 zen 一致,也符合 README 写的「0.3 出来重核」。

验证

在断网 bwrap 沙箱里跑(--unshare-net,不挂 /home,env -i,不带凭据)。依赖事先在沙箱外下载好。Node 24.22.1。

项 结果
dsh 宿主兼容检查 evaluatePluginCompatibility(dsh 0.2.1-rc.2 和 0.2.1-rc.5 的 app-boot,新旧 manifest 各一次) 新旧都是 OK
严格 peer 校验 @ 0.2.1-rc.2 / 0.2.1-rc.5 旧范围 ❌ → 新范围 ✅(两个文件都是)
根 node --test test/*.test.mjs 817 个:815 pass / 0 fail / 2 skipped
node scripts/sync-doc-version.mjs --check OK
dsh-plugin: pnpm install --frozen-lockfile --offline(pnpm 11.7.0) OK,锁文件不用改
dsh-plugin: verify(tsc ×2) OK
dsh-plugin: node --test test 112/112

@KyoMio
KyoMio merged commit f5d1585 into main Oct 30, 2026
3 of 4 checks passed
@KyoMio
KyoMio deleted the fix/dsh-peer-range-prerelease branch October 30, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants