如何通过仅修改我自己项目的 composer.json 文件来修改外部包的 composer.json 文件?
这仅用于测试目的。我需要测试一个包是否与另一个包的新版本兼容。
我的项目作曲家.json:
{
"require": {
"foo/framework": "1.2.0",
"bar/extension": "1.1.0"
}
}
外部包 ( bar/extension
) composer.json:
{
"require": {
"foo/framework": "1.2.0"
}
}
所以这显然有效。但是假设我想拥有新版本的foo/framework
,这是1.3.0
。这不起作用,因为bar/extension
取决于旧版本。
仅使用项目的 composer.json,如何更改bar/extension
包的要求?
package
类型的存储库覆盖composer.json
依赖项。在您的composer.json
中添加以下内容(应调整 URL):
"repositories": [
{
"type": "package",
"package": {
"name": "bar/extension",
"version": "1.1.0",
"dist": {
"url": "https://github.com/bar/extension/archive/1.1.0.zip",
"type": "zip"
},
"require": {
"foo/framework": "1.2.0 || 1.3.0"
}
// rest of necessary settings from original bar/extension composer.json
}
}
],
请注意,package
类型非常不灵活,并且会产生许多问题 - 我不建议将其用于测试以外的任何其他用途。在实践中,最好只分叉包并使用vcs
存储库在您的项目中使用它 - 您将能够对包进行必要的调整并作为上游的拉取请求提出(或永久使用 fork)。
思想,如果bar/extension
依赖于旧版本,则不应使用较新版本的foo/framework
,因为它可能与较新版本不兼容,并且会导致应用程序中的错误。
但是,如果bar/extension
版本范围,并且您想使用此范围内的最新版本,则可以使用 conflict 指令指定它。
或者您甚至可以尝试替换指令。