Как обновить библиотеки в файле composer.json до актуальных версий

Бывают такие ситуации, когда нужно внести правки в какой-либо проект, в который никто не заглядывал уже полгода-год. И конечно же большая часть библиотек в таких проектах уже не самых последних версий. И по закону подлости часть библиотек за это время успевает зарелизить новые мажорные версии, у которых в зависимостях также сменились мажорные версии. И так каскадом нужно обновить практически все зависимости в проекте. Так что простой 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, благодаря которому каждое обновление будет вытягивать последние стабильные версии библиотек. Выглядит это примерно так: