Composer 依赖的依赖版本冲突了,如何解决

现在有一个项目是基于 Laravel 8.31.0 的,由于项目需要使用又拍云,现在准备引用又拍云 SDK

  • Laravel 8 依赖于 guzzle 7
  • upyun/sdk 依赖于 guzzle 6

由此,composer require upyun/sdk 时出现了冲突

现在问题是,这个项目已经写了一段时间了,所以降级 Laravel 不太可能;又拍云官方不管事,去年 9 月已经有人提了 issue 到现在都没动静;我也不想 fork 一份去维护或者自己实现一个 SDK

如果 upyun/sdk 也兼容 guzzle 7,有没有办法解决这个冲突呢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6
zhouyg

可以试试用 replace 属性,写一个三方包同时代替 packageC:1.x 与 packageC:2.x

"replace": {
    "packageC": "1.x|2.x"
}
3年前 评论

@zhouyg 谢谢,看了文档也没搞懂 replace 怎么用的

是否可以在同一个扩展包里同时 require guzzle 7 并 replace guzzle 6,以此来实现代替用途

3年前 评论

@Summer :joy:收到,事实上我尝试创建了一个包 cornjosh/guzzle-replace ,其中 composer.josn 是这样的

···
    "require": {
        "guzzlehttp/guzzle": "^7.2"
    },
    "replace": {
        "guzzlehttp/guzzle": "^6.0.0"
    }
···

按照 如何使用 Composer 中的 replace 属性? 中的描述,我的包应该可以代替 guzzle:^6.0.0

但是尝试安装的时候还是报错了,composer 尝试移除 guzzle 7 并发生了冲突

3年前 评论
Wen-_- 2年前

1-克隆三方依赖(又拍云)到本地, 2-删除(又拍云)composer.json中的冲突包(guzzle 6), 3-将三方包移到私有仓库, 4-root composer.json中新增私有仓库。

如果又拍云开源的话可以将第三部替换成-上传到码云或者github进行私有化。

刚刚解决完这个问题...三方不是又拍云但比较吻合。

blog.csdn.net/weixin_39452069/arti...

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!