Как требовать локальный пакет, который зависит от другого локального пакета
A имеют следующие папки, каждая из которых содержит проект:
PackageA
PackageB
PackageC
PackageA зависит от PackageB witch также зависит от PackageC, Каждый из которых является репозиторием git.
Это композитор PackageA.json:
{
"name": "packagea/packagea",
"require": {
"packageb/packageb": "dev-master"
}
"repositories": [
{
"type": "vcs",
"url": "../PackageB"
}
]
}
Это PackageB композитор.json:
{
"name": "packageb/packageb",
"require": {
"packagec/packagec": "dev-master"
}
"repositories": [
{
"type": "vcs",
"url": "../PackageC"
}
]
}
И этоPackageC композитор.json:
{
"name": "packagec/packagec"
}
Это то, что я получаю, когда я пытаюсь composer update
на папке PackageA:
Ваш требования не могут быть разрешены к устанавливаемому набору пакеты.
Задача 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 для более подробной информации.
Но есть зависимость PackageC , указанная на PackageB
Что я делаю не так?
1 ответ:
Главный трюк с частными зависимостями заключается в том, что записи
composer
, найденные вrepositories
, не являются общими для всего дерева. Так что если у вас есть свойproject
, который требуетpackage A
от VCS, то вашproject
должен включить соответствующую запись в свойcomposer.json
разделrepositories
. Это довольно очевидно, но теперь представьте, что сказалpackage A
требуетpackage B
из другого частного репозитория. Итак, вы добавляете то, что необходимо дляpackage B
composer.json
'srepositories
но хотя модульные тесты этого пакета работают нормально, вы все равно потерпите неудачу при попытке включите этот компонент в свойproject
таким же образом, как вы описали. Это все из-за этих источников зависимости. Не столь очевидное решение состоит в том, чтобы включить все частные репозитории в вашproject
scomposer.json
- Даже если он непосредственно не нужен или не используется. Другими словами, Вашproject
' scomposer.json
должен включать записи для репозиториев VCS, необходимые для всех пакетов, которые он включает,package A
иpackage B
(и так далее). В вашем случае вам нужно, чтобы это выглядело так:{ "name": "packagea/packagea", "require": { "packageb/packageb": "dev-master" } "repositories": [ { "type": "vcs", "url": "../PackageB" }, { "type": "vcs", "url": "../PackageC" } ] }