Почему репозиторий загрузок не может быть реконструирован composer'ом?

Вы можете столкнуться с проблемами при использовании пользовательских репозиториев, потому что Composer не загружает репозитории ваших требований, поэтому вам нужно переопределить эти репозитории во всех ваших файлах composer.json.

Прежде чем вдаваться в подробности о том, почему это так, вы должны понимать, что основное использование пользовательских репозиториев VCS и пакетов - это временное использование некоторых вещей или использование вилки проекта до тех пор, пока ваш запрос на слияние не будет объединен, и т. Д. Не должны использовать их для отслеживания частных пакетов. Для этого вам лучше заглянуть в Private Packagist, который позволяет вам настраивать все ваши приватные пакеты в одном месте и избегать замедлений, связанных с встроенными репозиториями VCS.

Существует три способа, с помощью которых решатель зависимости может работать с пользовательскими репозиториями:

  • Выбирать репозитории корневого пакета, получать все пакеты из определенных репозиториев, решать требования. Это текущее состояние, и оно работает хорошо, за исключением ограничения не рекурсивной загрузки репозиториев.
  • Извлекать репозитории корневого пакета, инициализируя пакеты из определенных репозиториев, инициализировать рекурсивно все репозитории, найденные в этих пакетах, а также пакеты их пакетов и т. Д., А затем разрешать требования. Это может работать, но это замедляет инициализацию, так как VCS repos может занять несколько секунд, и это может закончиться полностью разбитым состоянием, поскольку многие версии пакета могут определять одни и те же пакеты внутри репозитория пакетов, но с Различный dist / source. Есть много способов, как это может пойти не так.
  • Выбирать репозитории корневого пакета, затем извлекать репозитории зависимостей первого уровня, затем извлекать репозитории своих зависимостей и т. Д., А затем разрешать требования. Это звучит более эффективно, но оно страдает от тех же проблем, что и второе решение, потому что загрузка репозиториев зависимостей не так проста, как кажется. Вам необходимо загрузить все репозитории всех потенциальных совпадений для требования, которое снова может иметь конфликтующие определения пакетов.