Выбор ответа Senior Composer и PSR обновлено

Конфликт зависимостей

Вопрос

Пакет A требует guzzlehttp/guzzle: ^6.5, пакет B требует ^7.0. Что сделает Composer?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Откажется устанавливать: версия пакета одна, а пересечения нет. В отличие от npm, Composer строит плоское дерево зависимостей: у каждого пакета одна версия на проект, ведь классы с одинаковыми именами нельзя загрузить дважды.

Варианты ответа

  1. Откажется устанавливать: версия пакета одна, а пересечения нетправильный ответ
  2. Установит обе версии в разные каталоги vendor, как npm
  3. Выберет более новую версию 7 и выведет предупреждение для A
  4. Установит версию 6, потому что пакет A подключён в проект раньше

Разбор

В отличие от npm, Composer строит плоское дерево зависимостей: у каждого пакета одна версия на проект, ведь классы с одинаковыми именами нельзя загрузить дважды. Если ограничения не пересекаются, решатель SAT сообщает о конфликте. Выход: обновить A до версии, поддерживающей Guzzle 7, найти форк или заменить пакет. Команда composer why-not guzzlehttp/guzzle 7.0 показывает, кто мешает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.