fix(esm): Vendor 支持子路径,不然 es-toolkit/compat 这种装不了

有些包把东西放在子路径下(es-toolkit 的 toString 只在 compat 里,主入口没有),
而摊平之后原包的 exports 映射就没了,import "es-toolkit/compat" 解析不到。

现在直接写子路径就行:

    esm.Install(ctx, "es-toolkit/compat", "app/node_modules")

拉的是根包,摊平的是子路径,落到 node_modules/es-toolkit/compat/。根包和子路径
可以共存——子路径目录嵌在根包目录里,而最小 package.json 不写 exports,
所以解析器认得出来。

npm.SplitPath 负责拆名字,scoped 包名自带一个斜杠所以前两段才是包名。
This commit is contained in:
2026-09-07 10:58:34 +08:00
parent 00d95c496f
commit ad722b12f9
6 changed files with 179 additions and 4 deletions
+19
View File
@@ -220,3 +220,22 @@ func pick(versions []string, r versionRange) (string, error) {
}
return bestRaw, nil
}
// Satisfies 判断某个版本满不满足一个范围。
//
// 给「已经装过了,还用不用重装」这类判断用:配置里写 qs@^6,装着的是 6.16.0
// 就跳过,是 5.x 就得换。
//
// 范围的写法支持范围见本文件开头;解析不了会返回错误,调用方可以选择当作
// 「需要重装」还是直接报错。
func Satisfies(version, rangeSpec string) (bool, error) {
v, err := parseVersion(version)
if err != nil {
return false, err
}
r, err := parseRange(rangeSpec)
if err != nil {
return false, err
}
return r.allows(v), nil
}