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

时间:2017-07-29 19:01:28

标签: php git composer-php

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

PackageA
PackageB
PackageC

PackageA 取决于 PackageB 还取决于 PackageC ,每个都是git存储库。

这是 PackageA composer.json:

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

这是 PackageB composer.json:

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

这是 PackageC composer.json:

{
    "name": "packagec/packagec"
}

这是我在PackageA文件夹上尝试composer update时得到的结果:

  

您的要求无法解析为可安装的一组   包。

     

问题1        - packageb / packageb dev-master的安装请求 - >可以通过packageb / packageb [dev-master]来满足。        - packageb / packageb dev-master需要packagec / packagec dev-master - >找不到匹配的包。

     

潜在原因:     - 包名中的拼写错误     - 根据您的最小稳定性设置,该包装没有足够稳定的版本   https://getcomposer.org/doc/04-schema.md#minimum-stability了解更多详情。

但是, PackageB

指定了 PackageC 依赖关系

我做错了什么?

1 个答案:

答案 0 :(得分:3)

私有依赖的主要技巧是composer中的repositories个查找不会在整个树中共享。因此,如果您的project需要来自VCS的package A,那么您的project需要在自己的composer.json repositories中包含正确的条目部分。这很明显,但现在想象package A需要来自不同私有存储库的package B。因此,您需要添加package B composer.json repositories所需的内容,但即使该套餐的单元测试工作正常,您仍然会尝试将其包含在内您project中的组件,与您描述的方式相同。这都是因为这些依赖性来源。不太明显的解决方案是将所有私有存储库包含在project composer.json中 - 即使不直接需要或使用它。换句话说,您的project composer.json必须包含VCS存储库的条目,包括其所包含的所有软件包,package Apackage B(依此类推) 。在你的情况下,你需要让它像这样:

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