Бывают такие ситуации, когда нужно внести правки в какой-либо проект, в который никто не заглядывал уже полгода-год. И конечно же большая часть библиотек в таких проектах уже не самых последних версий. И по закону подлости часть библиотек за это время успевает зарелизить новые мажорные версии, у которых в зависимостях также сменились мажорные версии. И так каскадом нужно обновить практически все зависимости в проекте. Так что простой composer update тут не поможет, т.к.
Это особо актуально для проектов в которых используются клиентские библиотеки к сторонним сервисам, которое периодически меняют своё API и без обновления этих библиотек проект превращается в бессмысленную кучу неработающего кода.
Первым делом можно посмотреть список устаревших библиотек с помощью команды:
composer show -l
Результат будет примерно таким:
laravel/framework v5.6.17 ! v5.6.20 The Laravel Framework. laravelcollective/html v5.6.6 ! v5.6.7 HTML and Form Builders for the Laravel Framework nesbot/carbon 1.25.0 ! 1.27.0 A simple API extension for DateTime. phpdocumentor/type-resolver 0.4.0 ~ 0.6.1 phpunit/php-code-coverage 6.0.3 ! 6.0.4 Library that provides collection, processing, and rendering functionality for PHP code coverage information. phpunit/phpunit 7.1.4 ! 7.1.5 The PHP Unit Testing framework. react/event-loop v0.4.3 ~ v0.5.2 Event loop abstraction layer that libraries can use for evented I/O. symfony/class-loader v3.4.8 ! v3.4.9 Symfony ClassLoader Component
Теперь можно ручками методично исправить версии в файле composer.json и выполнить composer update. Но можно поступить чуть более проще и хитрее. Composer поддерживает некоторые макросы и вместо указания версии можно указать макрос @stable, благодаря которому каждое обновление будет вытягивать последние стабильные версии библиотек. Выглядит это примерно так: