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:
@@ -230,6 +230,16 @@ res, err := esm.Install(ctx, "qs", "app/node_modules")
|
||||
res, err := esm.Vendor(".", "qs", "app/node_modules")
|
||||
```
|
||||
|
||||
包把东西放在**子路径**下的(`es-toolkit/compat`、`lodash/isString`),直接写子路径:
|
||||
|
||||
```go
|
||||
esm.Install(ctx, "es-toolkit/compat", "app/node_modules")
|
||||
```
|
||||
|
||||
拉的是根包,摊平的是那个子路径,落到 `node_modules/es-toolkit/compat/`。
|
||||
**必须这么写**——摊平之后原包的 `exports` 映射就没了,`import "es-toolkit/compat"`
|
||||
在只有根包的情况下解析不到。
|
||||
|
||||
`esm/npm` 只做「把包和依赖弄到磁盘上」,**刻意不是 npm**:不跑安装脚本(供应链攻击
|
||||
的主要入口,而纯 JS 库根本不需要)、不管 devDependencies、semver 只实现 `^`/`~`/精确/
|
||||
`x`/`>=` 这个子集、只平铺不嵌套。碰上支持不了的(复合版本范围、主版本冲突)会**明确
|
||||
|
||||
Reference in New Issue
Block a user