我有一个名为project的文件夹。
我使用"yarn add“来安装两个包(antd和antd-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。
那么为什么会发生这种情况呢?我认为两个包使用相同的另一个不同版本的包应该不会互相影响。
发布于 2019-04-12 14:25:46
从Here复制
版本锁定
yarn会在每次安装后生成yarn.lock,持久化已安装包的所有版本(您可能知道包可以有依赖关系,依赖关系也可以有依赖关系),因此它可以构建无限的依赖关系树,这可能会导致非常糟糕的冲突。让我们想象一下这样的场景
- 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.lock,yarn最终会“模仿”包的状态当你在其他人手中提交yarn.lock时它们是如何安装的NPM看起来非常令人满意,并且可以为2个开发人员获取2个不同的版本(假设包正在及时升级)
https://stackoverflow.com/questions/55645508
复制相似问题