首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一个包的依赖关系会影响另一个包

为什么一个包的依赖关系会影响另一个包
EN

Stack Overflow用户
提问于 2019-04-12 14:12:55
回答 1查看 39关注 0票数 1

我有一个名为project的文件夹。

我使用"yarn add“来安装两个包(antdantd-mobile),它们都有一个名为rc-checkbox的依赖项。

antd使用"rc-checkbox": "~2.1.5"

antd-mobile使用"rc-checkbox": "~2.0.0"

运行该命令后,project/node_modules具有2.0.0版本的rc-checkbox文件夹,而project/node_modules/antd/node_modules具有2.1.5 rc-checkbox文件夹。

奇怪的是,无论我先安装哪一个,antd-mobile的2.0.0 rc-checkbox都会安装在project/node_module上,而当我运行这个项目时,antd使用的是2.0.0版本的rc-checkbox (它应该使用2.1.5),这就导致了这个bug。

那么为什么会发生这种情况呢?我认为两个包使用相同的另一个不同版本的包应该不会互相影响。

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 14:25:46

Here复制

版本锁定

yarn会在每次安装后生成yarn.lock,持久化已安装包的所有版本(您可能知道包可以有依赖关系,依赖关系也可以有依赖关系),因此它可以构建无限的依赖关系树,这可能会导致非常糟糕的冲突。让我们想象一下这样的场景

代码语言:javascript
复制
 - lodash^1
 - super_module@0.0.1
 - - lodash@1.0.0
 - another_module@0.0.01
 - - lodash@1.x.x

想象一下这样的场景,当another_module的维护者决定将lodash更改为破坏版本1.2.0时,可能发生的情况是,过去的npm可能会获取同一个库的两个不同实例,以及两个不同的版本,这可能会导致非常奇怪的行为。因为您的模块中没有精确的锁(您接受任何版本的^1.x.x和^2.x.x,因此这意味着这两个子模块将满足您的需求,但获取不同的版本。yarn会在项目中添加新的包时锁定你的yarn.lock,这意味着当你的项目中的其他开发人员签出项目时,他也会有相同的yarn.lockyarn最终会“模仿”包的状态当你在其他人手中提交yarn.lock时它们是如何安装的NPM看起来非常令人满意,并且可以为2个开发人员获取2个不同的版本(假设包正在及时升级)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55645508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档