Composer 没有安装分叉库所需的依赖项
Composer is not installing the required dependencies of a forked library
Github 上有一个图书馆,名为 abc/xyz
。
我已分叉库以更新其 composer.json
。
其 composer.json
的 require
部分是:
{
"require": {
"xyz/abc": "^1.2",
}
}
分叉版本的require
部分是:
{
"require": {
"xyz/abc": "^2.4",
}
}
当我执行 composer require abc/xyz
时,它还会下载并安装 xyz/abc
图书馆。
但是当我使用分叉版本并将以下内容添加到根 composer.json
的 repositories
部分时
{
"repositories": [
{
"type": "package",
"package": {
"name": "abc/xyz",
"version": "1.2",
"dist": {
"url": "url to zip folder of the forked version",
"type": "zip"
},
"type": "library"
}
}
]
}
现在,当我执行 composer require abc/xyz
时,它只会下载并安装实际的软件包,而不是 xyz/abc
。
我也尝试使用 type: git
而不是 zip
并将 url
更改为 git 版本,但结果相同。
如果我在根目录中使用它,它只会下载并安装该依赖项composer.json
"type": "package",
"package": {
"name": "abc/xyz",
"version": "1.2",
"dist": {
"url": "url to zip folder of the forked version",
"type": "zip"
},
"type": "library",
"require": {
"xyz/abc": "^2.4",
}
}
这是标准方式吗?或者我在这里做错了什么?
当您使用 package
类型的存储库时,未读取链接包的 composer.json
。
package
类型用于定义composer.json
文件内联,主要用于不支持composer[=的包47=].
来自 the docs:
package
: If you depend on a project that does not have any support for Composer whatsoever you can define the package inline using a package
repository. You basically inline the composer.json object.
(强调我的)
如果您的包确实支持作曲家(例如,包含定义依赖项、自动加载器等的 composer.json
文件),请使用类型 vcs
.
要使用分叉版本,您只需添加一个包含分叉版本的存储库。通常,对于分叉,我只依赖 dev-master
/dev-main
,因为分叉并未真正发布,只包含一些 hot-fixes,它们在“主”包中不存在。或者 dev-whatever-branch-your-fixes-exist
.
假设您的 xyz/abc
分支托管在 https://github.com/ahmad/abc
上,您的根目录 composer.json
应该类似于:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/ahmad/abc"
}
],
"require": {
"xyz/abc": "dev-master"
}
}
(只是添加了相关部分,显然这并不意味着您必须删除根 composer.json
文件的其余部分,只需更改适当的位即可)
Github 上有一个图书馆,名为 abc/xyz
。
我已分叉库以更新其 composer.json
。
其 composer.json
的 require
部分是:
{
"require": {
"xyz/abc": "^1.2",
}
}
分叉版本的require
部分是:
{
"require": {
"xyz/abc": "^2.4",
}
}
当我执行 composer require abc/xyz
时,它还会下载并安装 xyz/abc
图书馆。
但是当我使用分叉版本并将以下内容添加到根 composer.json
的repositories
部分时
{
"repositories": [
{
"type": "package",
"package": {
"name": "abc/xyz",
"version": "1.2",
"dist": {
"url": "url to zip folder of the forked version",
"type": "zip"
},
"type": "library"
}
}
]
}
现在,当我执行 composer require abc/xyz
时,它只会下载并安装实际的软件包,而不是 xyz/abc
。
我也尝试使用 type: git
而不是 zip
并将 url
更改为 git 版本,但结果相同。
如果我在根目录中使用它,它只会下载并安装该依赖项composer.json
"type": "package",
"package": {
"name": "abc/xyz",
"version": "1.2",
"dist": {
"url": "url to zip folder of the forked version",
"type": "zip"
},
"type": "library",
"require": {
"xyz/abc": "^2.4",
}
}
这是标准方式吗?或者我在这里做错了什么?
当您使用 package
类型的存储库时,未读取链接包的 composer.json
。
package
类型用于定义composer.json
文件内联,主要用于不支持composer[=的包47=].
来自 the docs:
package
: If you depend on a project that does not have any support for Composer whatsoever you can define the package inline using apackage
repository. You basically inline the composer.json object.
(强调我的)
如果您的包确实支持作曲家(例如,包含定义依赖项、自动加载器等的 composer.json
文件),请使用类型 vcs
.
要使用分叉版本,您只需添加一个包含分叉版本的存储库。通常,对于分叉,我只依赖 dev-master
/dev-main
,因为分叉并未真正发布,只包含一些 hot-fixes,它们在“主”包中不存在。或者 dev-whatever-branch-your-fixes-exist
.
假设您的 xyz/abc
分支托管在 https://github.com/ahmad/abc
上,您的根目录 composer.json
应该类似于:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/ahmad/abc"
}
],
"require": {
"xyz/abc": "dev-master"
}
}
(只是添加了相关部分,显然这并不意味着您必须删除根 composer.json
文件的其余部分,只需更改适当的位即可)