又犯迷糊了,这个我们的项目 A 依赖两个包 B 和 C,但 B 和 C 依赖同一个包 D,只是版本不同。

2022-03-17 17:54:40 +08:00
 yazoox

这种情况下,npm 会如何管理包?

我在 node_modules 的目录下面,只看到了 D 的最新版本,即 C 依赖的 D 的版本文件,B 依赖的低版本的 D 看不到。这个是咋回事么?

然后在 yarn.lock 文件里,D 的两个版本都有......

7434 次点击
所在节点    Node.js
7 条回复
foolnius
2022-03-17 17:58:44 +08:00
B 包里面有一个 node_modules ,C 包里面也有一个 node_modules
FreshOldMan
2022-03-17 18:01:15 +08:00
npm 的正常操作,两个版本的 D 会都下载下来
yazoox
2022-03-17 18:01:52 +08:00
@FreshOldMan 下载下来后,放在哪里?
libook
2022-03-17 18:05:15 +08:00
很多包是依赖模糊版本,比如“~”开头的和“^”开头的都是会自动选择一个区间范围,如果 B 和 C 依赖的 D 版本区间有交集,是可以共用同一个版本的 D 的。
yazoox
2022-03-17 18:25:22 +08:00
找到一篇文章,基本看明白了。“扁平化” 和 “依赖提升”
https://juejin.cn/post/6932046455733485575
feimo1996
2022-03-23 11:59:30 +08:00
这种情况如果 D 的两个版本没啥兼容性问题那就还好。
willx12123
2022-06-19 10:26:57 +08:00
你用的是 yarn 的话,B 、C 如果依赖了同一个版本的 D ,那么 D 会和 B 、C 同级别出现,就像这样:

```
node_modules
- D
- B
- C
```

如果不同的话,那么 yarn 可能会将其中一个提升到同级别,然后另一个包下会出现一个 node_modules ,就好象这样:

```
node_modules
- D@1.0
- B
- C
- node_modules
- D@2.0
```

yarn 会尽可能的去打平依赖,除非版本不同。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841075

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX