Composer 没有安装分叉库所需的依赖项

Composer is not installing the required dependencies of a forked library

Github 上有一个图书馆,名为 abc/xyz

我已分叉库以更新其 composer.json

composer.jsonrequire 部分是:

{
   "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 文件的其余部分,只需更改适当的位即可)