Php 如何要求依赖于其他本地包的本地包

Php 如何要求依赖于其他本地包的本地包,php,git,composer-php,Php,Git,Composer Php,A具有以下文件夹,每个文件夹包含一个项目: PackageA PackageB PackageC PackageA依赖于PackageB,它也依赖于PackageC,每一个都是一个git存储库 这是PackageAcomposer.json: { "name": "packagea/packagea", "require": { "packageb/packageb": "dev-master" } "repositories": [

A具有以下文件夹,每个文件夹包含一个项目:

PackageA
PackageB
PackageC
PackageA依赖于PackageB,它也依赖于PackageC,每一个都是一个git存储库

这是PackageAcomposer.json:

{
    "name": "packagea/packagea",
    "require": {
         "packageb/packageb": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageB"
        }
    ]
}
{
    "name": "packageb/packageb",
    "require": {
         "packagec/packagec": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageC"
        }
    ]
}
{
    "name": "packagec/packagec"
}
这是PackageBcomposer.json:

{
    "name": "packagea/packagea",
    "require": {
         "packageb/packageb": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageB"
        }
    ]
}
{
    "name": "packageb/packageb",
    "require": {
         "packagec/packagec": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageC"
        }
    ]
}
{
    "name": "packagec/packagec"
}
这是PackageCcomposer.json:

{
    "name": "packagea/packagea",
    "require": {
         "packageb/packageb": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageB"
        }
    ]
}
{
    "name": "packageb/packageb",
    "require": {
         "packagec/packagec": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageC"
        }
    ]
}
{
    "name": "packagec/packagec"
}
这是我在PackageA文件夹上尝试
composer update
时得到的结果:


无法将您的需求解析为可安装的 包裹

问题1 -packageb/packageb开发主机->可由packageb/packageb[开发主机]满足的安装请求。 -packageb/packageb开发主机需要packagec/packagec开发主机->未找到匹配的包

潜在原因: -软件包名称中的输入错误 -根据您的最低稳定性设置,该软件包没有足够稳定的版本,请参阅 更多细节

但是,PackageB


我做错了什么?

私有依赖的主要技巧是
composer
存储库中找到的条目不在整个树中共享。因此,如果您有您的
项目
,它需要VCS提供
包A
,那么您的
项目
需要在自己的
composer.json
存储库
部分包含正确的条目。这是非常明显的,但是现在想象一下,所说的
包A
需要来自不同私有存储库的
包B
。因此,您向
包B
composer.json
存储库添加了所需的内容,但尽管该包的单元测试工作正常,但在尝试将该组件包括在
项目中时仍然会失败,与您描述的方式相同。这都是因为这些依赖源。不太明显的解决方案是在
项目的
composer.json
中包含所有私有存储库,即使它不是直接需要或使用的。换句话说,您的
项目
composer.json
必须包含它所包含的所有包、
包A
包B
(依此类推)所需的VCS存储库条目。在您的情况下,您需要使其看起来像:

{
    "name": "packagea/packagea",
    "require": {
         "packageb/packageb": "dev-master"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "../PackageB"
        },
        {
            "type": "vcs",
            "url": "../PackageC"
        }
    ]
}

无法将您的需求解析为可安装的软件包集。问题1-packageb/packageb开发主机需要packagec/packagec开发主机->可由packagec/packagec[开发主机]满足packageb/packageb开发主机需要packagec/packagec开发主机->可由packagec/packagec[开发主机]满足packagec/packagec==999999-dev-packageb/packageb dev master的安装请求->可由packagec/packagec[dev master]满足。这是您的答案中缺少的问题解决方案:“最小稳定性”:“dev”,“prefere stable”:truePlease,将这些行添加到您的答案中,以便我可以标记为答案,非常感谢!:)如果需要,您可能根本不需要设置
最小稳定性
,即
开发主机
版本