Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires ... found ... but it conflicts
#Как читать сообщение
Composer выводит блок Problem 1, Problem 2 с цепочкой причин: какой пакет требует какую версию другого пакета. Ключевые фразы: requires php ^8.1 but your php version (7.4.33) does not satisfy that requirement — дело в версии PHP; requires ext-gd * but it is missing — не хватает расширения; Root composer.json requires A ^2.0 -> satisfiable by A[2.0.0] ... B v1.0 requires A ^1.0 — два пакета требуют несовместимых версий третьего. Начните с чтения первой причины: обычно она называет главного виновника.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Версия PHP ниже требуемойПакет новее PHP. | requires php ^8.1. | Поднимите PHP или возьмите старую версию. |
| Отсутствует расширениеext-gd, ext-intl. | ext-... is missing. | Установите расширение. |
| Несовместимые версии зависимостейДва пакета требуют разное. | Problem с цепочкой. | Обновите оба. |
| Старый composer.lockЗафиксированные версии. | Не обновляется. | composer update пакета. |
| Заброшенный пакетНе обновляется. | Конфликт с новыми. | Найдите форк. |
| Мало памятиТяжёлое разрешение. | Killed/memory exhausted. | COMPOSER_MEMORY_LIMIT=-1. |
#Порядок
- Прочитайте сообщение и определите тип конфликта: PHP, расширение илиОткройте терминал в каталоге проекта с
composer.jsonиcomposer.lock(в VS Code: «Терминал» → «Создать терминал»). Выполните именно команду, вызвавшую конфликт, и найдите в выводе фразыrequires php,requires ext-*,conflicts withилиis locked to version. Запишите проблемный пакет и ограничения версий. Пока не выясните причину, не удаляйтеcomposer.lockи не запускайте обновление всех пакетов на рабочем сайте. - Проверьте версию PHP и расширенияВ той же среде выполните
php -v,php -mиcomposer check-platform-reqs. Проверьте фактический PHP CLI: на хостинге он может отличаться от PHP-FPM сайта. Если Composer сообщает об отсутствующемext-intl,ext-gdи т.п., установите расширение через администраторские средства сервера с учётом используемой версии PHP; не отключайте проверку платформы и не подменяйте версию PHP вcomposer.jsonради успешного запуска. - Выясните, кто блокирует нужную версию: composer why-not vendor/packageЕсли конфликт касается конкретной версии пакета, выполните
composer prohibits vendor/package 1.2.3или синонимcomposer why-not vendor/package 1.2.3, заменив пакет и версию на фактические из вывода. Команда показывает пакет, запрещающий эту версию; ничего не устанавливает. Если пакет уже установлен и нужно узнать, почему, воспользуйтесь следующим шагом. - Посмотрите, что требует пакет: composer why vendor/packageВыполните
composer why vendor/packageс реальным именем пакета, чтобы увидеть зависимости, которые его требуют. Откройтеcomposer.json, сравните ограничения вrequireиrequire-devи сверьте их с поддерживаемыми версиями по документации конкретных пакетов. Не заменяйте автоматически все ограничения на*— так можно получить несовместимые и небезопасные версии. - Обновите конфликтующие пакеты вместеЕсли найден совместимый набор версий, создайте отдельную ветку Git и резервную копию
composer.lock. В каталоге проекта выполните предварительную проверку:composer update vendor/a vendor/b --with-all-dependencies --dry-run, подставив действительные имена. Изучите, какие пакеты будут обновлены/удалены; если список слишком большой, пересмотрите ограничения. Установка выполняется отдельно после тестов и согласования, а не безусловно вслед за проверкой. - Смягчите ограничения версий в composer.json или обновите зависимостьЧтобы исправить ограничения в
composer.json, откройте соответствующий блокrequireв редакторе и измените только конфликтующую зависимость на версию, официально совместимую с вашим PHP и соседними пакетами. Сохраните, выполнитеcomposer validate, затем пробноеcomposer update ... --dry-run. Если приложение использует устаревший API, обновите код до реальной установки пакетов. - Если пакет заброшен, найдите заменуЕсли обновление невозможно из-за заброшенной библиотеки, проверьте официальный репозиторий пакета, дату последнего выпуска и совместимые поддерживаемые альтернативы. Переносите код и зависимости на отдельной испытательной ветке с тестами; не скачивайте случайные исправленные архивы и не обнуляйте ограничения для обхода Composer. Если это рабочий сайт, согласуйте план миграции.
- Для проверки используйте --dry-runПеред реальным изменением зависимостей выполните
composer update vendor/a vendor/b --with-all-dependencies --dry-run(имена подставить), убедитесь, что изменения ожидаемы. После создания резервной копии и прохождения тестов можно запустить такую же команду без--dry-runв тестовой среде, затемcomposer installна рабочей по согласованномуcomposer.lock. Не используйте--ignore-platform-reqs, если цель — исправить несовместимость. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Типичные конфликты
#Если ничего не помогает
Для проверки конфликта используйте отдельную копию проекта и сохранённый composer.lock. Выполните composer validate, composer why-not и пробное обновление с --dry-run. Не удаляйте composer.lock и не ослабляйте ограничения без согласования зависимостей — это делает результат неповторяемым.