Composer:循环依赖中的版本冲突

时间:2018-04-20 19:12:09

标签: php composer-php

首先,我知道这个设置是愚蠢的,但这就是我们坚持使用♂️

我们使用公司框架构建网站。该网站包含框架直接访问的一些类。这意味着我们有一个循环依赖。直到现在这都不是问题。

这些是我们composer.json的简洁版本:

框架

框架只定义了其他一些

{
    "name": "company/framework",
    "type": "library",
    "require": {
        ...
    }
}

网站

{
    "name": "company/website",
    "require": {
        "company/framework": "^4.3",
        ...
    }
}

非常简单,frameworkwebsite的依赖关系。

现在,我正在尝试使用framework的静态分析设置CI服务器。如上所述,framework需要website中的某些文件才能成功进行静态分析。

新的 company / framework / composer.json 文件如下所示:

{
    "name": "company/framework",
    "type": "library",
    "require": {
        "company/website": "^4.3",
        ...
    }
}

在测试带标记的framework版本时,此功能正常。每当我们进入开发分支时,Composer都会失败,因为website需要一个稳定的^4.3版本的框架,但这是一个开发分支。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

将测试框架所需的类提取到单独的包中。

Framework需要该包。

网站要求包裹。并且需要Framework(也需要该包)。

Voila,您将循环依赖转换为线性图。

为此方法添加语义版本控制,您将永远不会遇到严重问题 - 或者很快发现它们。