在yarn解析中只解析一个主要的版本依赖到一个特定的版本



我们在minimatch 3.0.5版本中收到一个漏洞。现在,我的项目使用了minimatch v3和v5。我想强制只有主要版本3的小匹配在补丁版本中拉,同时保持主要版本5的拉相同。

有人知道怎么做吗?谢谢!

我尝试了以下方法,但没有成功

"resolutions": {
"minimatch": ">=3.0.5"
}
"resolutions": {
"minimatch@3": ">=3.0.5"
}
"resolutions": {
"minimatch@<3.0.4": "3.0.5"
"minimatch@<5.0.4": "3.0.5"
}

不幸的是,这有点像拔牙。首先,你运行yarn set resolutions minimatch ">=3.0.5"了吗?因为当你可能(或者更可能不)幸运地使用package.json字段时,yarn只真正尊重它自己的分辨率,并且不认为两者之间有任何等同。

我的意思是一个简短的概述:package.json中的resolutions字段由包解析器使用,而不是yarn。比如,它只会在你的捆绑器中生效,等等。Yarn会轻松地按照你的依赖项所要求的版本安装任何包,其他的什么都不做,剩下的就交给node/webpack/任何为你处理导入包的系统。

相反,yarn有一个命令来设置yarn.lock文件中的分辨率,该更改安装的版本。yarn set resolution <package> <version>将编辑您的yarn.lock,使软件包指向您请求的版本。然而,这个命令是…有点奇怪。

因此,要解决手头的问题:您可能想要做的是首先尝试只使用包名,这可能有效。如果你从不希望minimatch低于3.0.5,那么我猜我的答案顶部的例子可能会起作用。但如果没有,则需要尝试特定的版本描述符。从yarn why minimatch开始,看看谁依赖它,在什么版本。然后,您需要选择安装<3.0.5的版本,对于每种情况,您都应该有一个类似于minimatch@npm:~3.0.4或类似的描述符。这就是你想要的描述。在yarn命令中使用该描述符:

yarn set resolution "minimatch@npm:~3.0.4" 3.0.5

当然,这会将它们专门设置为v3.0.5,而不是其他任何版本。您可以尝试其他版本的语法,但我还没有能够得到它的工作。你会知道它的工作,如果你的yarn.lock已经改变,改变符合你告诉纱。

我真希望他们能做得不同,但他们似乎不想。

相关内容

  • 没有找到相关文章

最新更新