如何通过Yarn 1.22的package.json仅替换特定版本的minimatch?
问题描述
我的项目通过间接依赖引入了minimatch 3.0.4和5.0.1版本,其中3.0.4版本存在已知漏洞。我希望将minimatch 3.0.4强制解析为3.0.6或3.0.7版本,但保留5.0.1版本不变,最终同时引用3.0.6和5.0.1版本。尝试过以下全局resolutions配置:
resolutions: { "minimatch": "3.0.6" }
但该配置会将所有版本的minimatch都重定向到3.0.6,无法保留5.0.1版本。请问能否通过package.json配合Yarn 1.22实现需求?
解决方案
可以实现。Yarn 1.x的resolutions支持版本范围匹配,只需针对minimatch的3.x版本段单独配置替换规则,就能不影响5.x版本。
在package.json中添加如下配置:
"resolutions": { "minimatch@^3.0.0": "3.0.6" }
- 规则说明:
minimatch@^3.0.0表示匹配所有3.x系列的minimatch依赖(包括有漏洞的3.0.4),Yarn会将这些依赖强制解析为3.0.6; - 5.0.1版本不在
^3.0.0的范围内,因此会保持原版本不变,最终项目中会同时存在3.0.6和5.0.1两个版本的minimatch。
如果需要更精准地仅替换3.0.4版本,也可以写成:
"resolutions": { "minimatch@3.0.4": "3.0.6" }
验证方法
执行yarn install完成依赖安装后,运行以下命令查看依赖树,确认版本替换是否生效:
yarn list minimatch
内容的提问来源于stack exchange,提问作者Asik
相关产品推荐
相关产品推荐

