如果实际上您确实对要接受的版本具有过分的限制,则可以使用yarn覆盖它们。
更新的编辑:从1.0开始,Yarn现在正式支持“ resolutions”块。因此,覆盖分辨率的方法是将这样的代码块添加到package.json
:
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
有时您会收到“不兼容”版本的警告,但我发现某些软件包(例如socket.io)对其接受的版本过于严格,因此,当它实际上没有损坏时,我会很乐意选择最新版本。东西。
以下是原始但过时的答案。
这听起来像原来的问题是不完全正确的,但原来的问题是实际上是一个我想回答,我找到了答案,所以这里是为后人:
我正在使用socket.io库,它具有component-emitter
依赖关系。但是它有一对所需的版本。这是更改任何内容之前yarn.lock文件的外观:
component-emitter@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
component-emitter@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
因此,在我的客户代码中包括了组件发射器的两个副本。我看了一下,在1.1.2和1.2.0(或最新的1.2.1)之间似乎没有任何重大变化。我首先尝试仅更改yarn.lock文件:
component-emitter@1.2.1, component-emitter@^1.2.1, component-emitter@1.1.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
此方法有效,但是文件中有关于它会自动生成的警告,这意味着我所做的每个更新或新软件包都会在此更改上脚。经过一番搜索,找到了该yarn --flat
选项,这将迫使纱线在整个项目中选择不超过每个卷装之一。在我看来,这似乎有些过激,因为我敢肯定,实际情况下,旧版本和新版本的软件包之间是不兼容的。我只是想从我的客户端代码中删除一个多余的软件包,以减小下载量。我仍然希望所有开发包都能正常工作。
但是在有关--flat的文档中,我找到了可以在package.json中使用的“ resolutions”块的引用:
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
因此,我尝试"component-emitter" : "1.2.1"
在package.json中放入一个新的“ resolutions”块,实际上对于需要它的所有位置,它都会将component-emitter展平为1.2.1,现在我的客户端代码中只有一个副本。
(现在该resolutions
块已完全受支持yarn
,因此您甚至不需要使用--flat
。)