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

icnyk63a  于 2023-05-06  发布在  Node.js
关注(0)|答案(1)|浏览(269)

我们在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"

  }
j2qf4p5b

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命令中使用该描述符:

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

当然,这会将它们专门设置为v3.0.5,而不是任何其他版本。您可以尝试使用其他版本的语法,但我无法让它正常工作。如果您的yarn.lock发生了更改,并且更改符合您告诉yarn的内容,您就会知道它是有效的。
我真的希望他们能换个方式,但他们似乎不想。

相关问题