Как требовать локальный пакет, который зависит от другого локального пакета


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 2

1 ответ:

Главный трюк с частными зависимостями заключается в том, что записи composer, найденные в repositories, не являются общими для всего дерева. Так что если у вас есть свой project, который требует package A от VCS, то ваш project должен включить соответствующую запись в свой composer.json раздел repositories. Это довольно очевидно, но теперь представьте, что сказал package A требует package B из другого частного репозитория. Итак, вы добавляете то, что необходимо для package B composer.json's repositories но хотя модульные тесты этого пакета работают нормально, вы все равно потерпите неудачу при попытке включите этот компонент в свой project таким же образом, как вы описали. Это все из-за этих источников зависимости. Не столь очевидное решение состоит в том, чтобы включить все частные репозитории в ваш project s composer.json - Даже если он непосредственно не нужен или не используется. Другими словами, Ваш project ' s composer.json должен включать записи для репозиториев VCS, необходимые для всех пакетов, которые он включает, package A и package B (и так далее). В вашем случае вам нужно, чтобы это выглядело так:

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