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 for更多细节 .
但是,在 PackageB 上指定了 PackageC 依赖项
我做错了什么?
1 回答
私有依赖的主要技巧是
repositories
中的条目composer
在整个树中不共享 . 因此,如果你有project
,它需要来自VCS的package A
,那么你的project
需要在自己composer.json
的repositories
部分中包含正确的条目 . 这很明显,但现在想象package A
需要来自不同私有存储库的package B
. 因此,您需要添加package B
composer.json
的repositories
所需的内容,但是当该程序包的单元测试工作正常时,您仍然会在尝试将该组件包含在_1150059中时失败,就像您描述的那样 . 这都是因为这些依赖性来源 . 不太明显的解决方案是将所有私有存储库包含在project
的composer.json
中 - 即使它不是直接需要或使用的 . 换句话说,project
的composer.json
必须包含其包含的所有包所需的VCS存储库条目,package A
和package B
(依此类推) . 在你的情况下,你需要让它像这样: