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 依赖关系我做错了什么?
答案 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 A
和package B
(依此类推) 。在你的情况下,你需要让它像这样:
{
"name": "packagea/packagea",
"require": {
"packageb/packageb": "dev-master"
}
"repositories": [
{
"type": "vcs",
"url": "../PackageB"
},
{
"type": "vcs",
"url": "../PackageC"
}
]
}