如何在Yarn Berry环境下更新已打补丁的依赖包
Yarn@3.0.2 二次修改patch协议依赖包的解决方案
报错原因
出现Multiple candidate packages found报错是因为当前项目依赖树中同时存在两个版本的@pkg/pkg:未打补丁的原始版本、通过patch:协议引入的补丁版本,Yarn无法自动判定你要针对哪个版本生成补丁。
解决方案
方案1:直接修改现有补丁文件(改动量较小时推荐)
- 进入项目根目录下的
.yarn/patches文件夹,找到命名格式为@pkg-pkg@x.x.x-<随机串>.patch的对应补丁文件 - 直接编辑该文件调整补丁逻辑
- 修改完成后执行
yarn install重新应用补丁即可生效
方案2:基于已打补丁的版本生成新修改目录(改动量较大时推荐)
- 执行
yarn list @pkg/pkg,在输出结果中找到通过patch:协议引入的版本完整标识,格式参考:@pkg/pkg@patch:@pkg/pkg@x.x.x#./.yarn/patches/@pkg-pkg@x.x.x-<随机串>.patch,复制该完整标识 - 执行命令生成临时修改目录:
yarn patch <你刚才复制的完整版本标识> - 进入命令返回的临时目录完成所有代码调整
- 执行提交命令更新补丁:
yarn patch-commit -s <临时目录路径>,Yarn会自动更新原有补丁文件,无需手动调整依赖配置 - 最后执行
yarn install验证补丁生效即可
注意:如果你直接指定原始版本号
@pkg/pkg@x.x.x执行yarn patch,会基于未打补丁的原始版本生成全新补丁,会丢失你之前的第一次补丁改动,需要手动合并两次改动内容,不推荐该操作。
内容的提问来源于stack exchange,提问作者SchlagerKhan
相关产品推荐
相关产品推荐

