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,有没有办法解决这个冲突呢

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 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-_- 1年前

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

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

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

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

2年前 评论

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