为什么 Composer 无法递归加载仓库?#

当使用自定义仓库时,你可能会遇到问题,因为 Composer 不会加载你的依赖项的仓库,所以你必须在所有 composer.json 文件中重新定义这些仓库。

在详细解释原因之前,你需要了解自定义 VCS 和包仓库的主要用途是暂时尝试一些东西,或者在你的拉取请求被合并之前使用项目的 fork。 你不应该用它们来跟踪私有包。 为此,你应该考虑使用 Private Packagist,它允许你在一个地方配置所有私有包,并避免与内联 VCS 仓库相关的速度下降。

依赖解析器可以使用三种方式处理自定义仓库。

  • 获取根包的仓库,从定义的仓库获取所有包,然后解析依赖项。 这是当前状态,它运行良好,除了没有递归加载仓库的限制。

  • 获取根包的仓库,在从定义的仓库初始化包时,递归地初始化在这些包中找到的所有仓库,以及它们的包的包,等等,然后解析依赖项。 它可以工作,但它会大大减慢初始化速度,因为每个 VCS 仓库可能需要几秒钟,并且最终会导致完全崩溃,因为同一个包的许多版本可以在一个包仓库中定义同一个包,但使用不同的 dist/source。 这种方法会导致许多问题。

  • 获取根包的仓库,然后获取第一级依赖项的仓库,然后获取其依赖项的仓库,等等,然后解析依赖项。 这听起来更有效,但它遇到了与第二个解决方案相同的问题,因为加载依赖项的仓库并不像听起来那样容易。 你需要加载所有满足依赖项要求的潜在匹配项的所有仓库,这些仓库可能又会包含冲突的包定义。

发现错别字? 文档中有问题? Fork 并编辑 它!