npm为什么父项目指定依赖版本后,可以影响到子项目的依赖
# 背景
在实际开发过程中,经常存在某三方包,更新了一个新版本,导致项目 run 不起来。 存在一些复杂场景,加入当前项目 A 依赖了 B 、 C,B 依赖了 C :
A =>
B => C
C
1
2
3
2
3
假如常用的 C 版本是 1.0.1 ,但是其更新了 1.0.2 ,导致不兼容。
这时候我们期望在 A 中锁定 C 的版本,同时也期望能让 B 的版本也维持在 1.0.1。
# 结论
在实际操作中,只需要把 A => C 的版本指定为 1.0.1 即可,B => C 的版本也会采用 1.0.1。结论很让人迷惑,因为我们都知道,更改父的依赖版本,并不能锁定子的版本。
经过实验和查阅资料,确定结果:
- 当安装到相同模块时,判断已安装的模块版本是否符合新模块的版本范围,如果符合则跳过,不符合则在当前模块的 node_modules 下安装该模块。
怎么理解这段,看下面的示例。
假如 A => [email protected] ,B => C@^1.0.0。这时候先安装 [email protected],检查到 B => C 时,发现 [email protected] 符合 C@^1.0.0 := C@^1.0.0 >= && < C@^2.0.0 ,所以不安装新包,采用当前已安装的依赖。
因此表象就是,我在父项目回退了版本,子项目居然也回退了。
# 相关文档
编辑 (opens new window)
上次更新: 2024/01/23, 16:34:42