Вышла новая версия менеджера зависимостей Composer 2.0 для PHP
Появилась новая версия менеджера зависимостей PHP Composer 2.0 — первое полноценное обновление сервиса с момента его выхода в 2012 году. Подробно рассказываем, какие обновления менеджера вошли в этот релиз.
- Улучшение производительности
- Архитектурные изменения в загрузке и установке улучшений
- Улучшенные отчеты об ошибках
- Как обновить Composer?
- Что дальше?
Улучшение производительности
Разработчики кардинально переработали Composer — начиная от протокола взаимодействия между Composer и packagist.org, заканчивая параллельным скачиванием файлов с помощью curl. Это значительно улучшило скорость работы и снизило потребление памяти. Конкретный прирост производительности зависит от способа использования Composer, но разработчики обещают, что пользователи утилиты будут приятно удивлены изменениями.
Разработчики указывают, что запуск composer require laravel/laravel на обычном потребительском оборудовании с Composer 2 при пустом кэше теперь тратит до 60% меньше времени, чем предыдущая версия менеджера.

Архитектурные изменения в загрузке и установке улучшений
Во время установки или обновления все пакеты будут сначала блокироваться и обновляться в composer.lock, и только после этого загружаться в кэш — при этом возможны ситуации, при которых эти процессы будут происходить параллельно. После того, как все файлы будут успешно загружены, Composer извлечет их в каталог vendor-dir — это позволит избежать не полного обновления каталога vendor в случае ошибки в работе интернета, либо других локальных проблем в работе пакета.
Улучшенные отчеты об ошибках
Не всегда всё идет так, как мы ожидаем. Если не удаётся разрешить зависимости, новый Composer генерирует более короткие и точные отчёты об ошибках, чтобы вам было проще в них разобраться.
Как обновить Composer?
Если у вас установлен Composer 1.x, запуск команды composer self-update лишь предупредит о выходе новой стабильной версии. Для обновления запустите команду composer self-update —2.
При возникновении проблем есть возможность откатиться обратно до первой версии менеджера при помощи команды composer self-update —1 . Можно спокойно экспериментировать с новой версией и не бояться что-нибудь сломать. Файл composer.lock совместим с обеими версиями, поэтому и с ним проблем при обновлении и откате на предыдущую версию не будет.
Разработчики также отмечают, что главной проблемой при обновлении версии менеджера могут стать плагины, часть которых еще не поддерживают Composer 2. В случае, если некоторые плагины не поддерживают новую версию менеджера, их можно отключить перед установкой. Делается это при помощи команды composer —no-plugins .
Что дальше?
Composer по-прежнему поддерживает PHP 5.3 и выше, однако в дальнейшем разработчики собираются отказаться от поддержки версий EOL PHP. Composer 1.x будет получать критические обновления какое-то время, но лучше обновиться до Composer 2.0 как можно скорее.
Настройка Composer: В профессии PHP-разработчик на Хекслете есть несколько уроков, где мы подробно разбираем, как настроить Composer и как вообще с ним работать.
Обновляемся до composer 2 на ubuntu!

Итак, подздравляем всех, с выходом composer 2. Праздник в дУше и в душЕ.
Сразу что стоит отметить это скороть работы. Как пример обновление зависимостей увеличилось в 2 раза! Меньше прожорливости и многое другое, полный список можно глянуть здесь.

Итак мы готовы. У нас ubuntu 20 и root.
composer self-update --2
2. Если видим ошибку: Command «self-update» is not defined. то делаем следующее:
3. Проверяем где установлен composer
which composer
/usr/bin/composer
запоминаем путь и создаем файл
nano cs.sh
#!/bin/sh EXPECTED_CHECKSUM="$(wget -q -O - https://composer.github.io/installer.sig)" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid installer checksum' rm composer-setup.php exit 1 fi php composer-setup.php --quiet --install-dir /usr/bin --filename composer RESULT=$? rm composer-setup.php exit $RESULT
где —install-dir /usr/bin —filename composer — путь до composer, это /usr/bin и имя файла composer
bash cs.sh
composer
Как обновить библиотеки в файле 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, благодаря которому каждое обновление будет вытягивать последние стабильные версии библиотек. Выглядит это примерно так:

Post Views: 3 460
Читайте также
Установить Composer как системную команду в Linux Сейчас мало проектов на PHP обходятся без пакетного менеджера Composer. Однако, он не является предустановленным пакетом в операционных системах даже…
Как обновить composer в проекте до > 2.*?
Добрый день, возник вопрос по composer`у.
В моем проекте (сайт на php) используется composer 1.9.3 (локально).
Есть нужда обновить его до последней версии (а также библиотеки) без потерь работоспособности проекта.
При использовании версии > 2.* возникают ошибки автозагрузчика и тд.
Подскажите, по какому алгоритму можно провести данную операцию? 🙂
Возможно есть какие-либо нюансы в переходе с 1.* на 2.*
- Вопрос задан более двух лет назад
- 686 просмотров
Комментировать
Решения вопроса 2

сначала апгрейдите сам композер, затем пакеты.
проблем быть не должно (все актуальные пакеты уже переписаны под изменения композера).
но таки лучше предварительно откатать на копии, а не рабочем проекте.
вторая версия — огонь. и переходить на неё нужно обязательно.
но могут быть проблемы со старыми (не поддерживаемыми) пакетами. тогда прост или ищите современную замену этому пакету, или конкретно для этого проекта пользуете старый композер.
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Кирилл Горелов @Kirill-Gorelov
С ума с IT
Рубрика вредные советы
1. composer self-update —2
2 способ. опасный. Но у меня сработало без проблем
sudo apt-get remove composer sudo apt-get remove --auto-remove composer sudo apt-get purge composer sudo apt-get purge --auto-remove composer echo 'удалил composer' cd /home/kirill/Документы/composer php composer-setup.php sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer composer -V echo 'composer обновил'
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- PHP
- +1 ещё
Как передать большое количество текста через ajax в php?
- 1 подписчик
- 2 часа назад
- 31 просмотр
