Выбор ответа Senior Composer и PSR обновлено
Конфликт зависимостей
Вопрос
Пакет A требует guzzlehttp/guzzle: ^6.5, пакет B требует ^7.0. Что сделает Composer?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Откажется устанавливать: версия пакета одна, а пересечения нет. В отличие от npm, Composer строит плоское дерево зависимостей: у каждого пакета одна версия на проект, ведь классы с одинаковыми именами нельзя загрузить дважды.
Варианты ответа
- Откажется устанавливать: версия пакета одна, а пересечения нетправильный ответ
- Установит обе версии в разные каталоги
vendor, как npm - Выберет более новую версию 7 и выведет предупреждение для A
- Установит версию 6, потому что пакет A подключён в проект раньше
Разбор
В отличие от npm, Composer строит плоское дерево зависимостей: у каждого пакета одна версия на проект, ведь классы с одинаковыми именами нельзя загрузить дважды. Если ограничения не пересекаются, решатель SAT сообщает о конфликте. Выход: обновить A до версии, поддерживающей Guzzle 7, найти форк или заменить пакет. Команда composer why-not guzzlehttp/guzzle 7.0 показывает, кто мешает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.