我们在minimatch版本〈3.0.5中发现了一个漏洞。现在,我的项目使用minimatch v3和v5可传递。我想只强制主要版本3的minimatch拉入修补版本,同时保持主要版本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"
}
1条答案
按热度按时间j2qf4p5b1#
不幸的是,这有点像拔牙。首先:你运行
yarn set resolutions minimatch ">=3.0.5"
了吗?因为虽然你可能(或者更有可能不)在package.json
字段上有运气,但yarn只真正尊重自己的分辨率,并不认为两者之间有任何等价性。下面简单介绍一下我的意思:
package.json
中的resolutions
字段由包解析器使用,而不是yarn。就像,它只会在你的bundler中生效,等等。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命令中使用该描述符:当然,这会将它们专门设置为v3.0.5,而不是任何其他版本。您可以尝试使用其他版本的语法,但我无法让它正常工作。如果您的
yarn.lock
发生了更改,并且更改符合您告诉yarn的内容,您就会知道它是有效的。我真的希望他们能换个方式,但他们似乎不想。