Composer, менеджер зависимостей для PHP, был выпущен около 8 лет назад, а сегодня опубликовали новую версию, 2.0. За эти годы Composer получил множество новых функций и не отставал от стандартов PHP. Вторая версия совместима со старыми проектами, но привнесет еще несколько замечательных новых функций. В этой статье расскажу о них подробнее.
Ускорение и оптимизация
В этом релизе была улучшена производительность. Теперь он не учитывает уже установленные пакеты, в результате обновление проходит на много быстрее. Также улучшили работу с памятью и процессором.
Команда установки стала умнее. Теперь она не изменяет папку vendor до тех пор, пока не гарантирует, что все пакеты установлены. Это позволяет избежать потери времени на их удаление в случае ошибок во время процесса.
Одной из лучших функций, для меня, стала параллельная загрузка, которая теперь поддерживается из коробки, и нам не нужно устанавливать дополнительные пакеты, как hirak/prestissimo, чтобы это работало.
Composer v2 почти в 2 раза быстрее, при установке laravel/laravel без кэширования.Поддержка оффлайн
Composer представил возможность использовать его в оффлайн режиме. Это может быть интересно для бенчмарков или при возникновении проблем с подключением к интернету, поэтому вам не нужно удалять Composer install/update из списка команд.
Чтобы это заработало, нужно добавить
COMPOSER_DISABLE_NETWORK=1
при выполнении команд:
COMPOSER_DISABLE_NETWORK=1 composer install
или установите его в переменных среды. Он выдаст предупреждение о том, что сеть отключена.:
https://repo.packagist.org could not be fully loaded (Network disabled, request canceled: https://repo.packagist.org/packages.json), package information was loaded from the local cache and may be out of date
кроме того, вы увидите сообщение для пакетов, без кэширования:
The required git reference for gabrielanhaia/laravel-circuit-breaker is not in cache and network is disabled, aborting
Поддержка --dry-run для require и remove
Эта опция уже была доступна при обновлении пакетов
(composer update --dry-run
. Она позволяет нам увидеть,
что произойдет при запуске команды, просто отображая данные в
терминале, без реальных изменений в вашем проекте или папке
vendor.
Composer 2.* дает возможность использовать опцию с
composer require
и composer remove
что
делает нашу жизнь проще
Предотвращение проблем при работе от root
При выполнении команд от пользователя root теперь требуется подтверждение, чтобы предотвратить наши ошибки.
В предыдущих версиях, когда вы пытались выполнить команду, она вызывала следующее сообщение:
Do not run Composer as root/super user! See https://getcomposer.org/root for details
С Composer 2.* вы должны подтвердить выполнение:
https://getcomposer.org/root for detailsContinue as root/super user [yes]?
Если интерактивный режим не поддерживается вашим терминалом, то
сообщение не покажется. Вы можете обойти это сообщение, с командой
--no-interaction
composer install --no-interaction
Канонические репозитории
Эта функция решает определенную проблему, с которой сталкиваются несколько разработчиков при использовании одного и того же пакета в разных репозиториях. Composer 1.0 следовал определенному порядку при установке/обновлении своих пакетов. Он начал искать пакеты в своем списке репозиториев до тех пор, пока пакет не будет найден (также последняя версия).
Иногда это было не совсем ожидаемое поведение при работе с различными версиями пакетов в других репозиториях (используемых одним и тем же проектом). Представьте себе, что иногда вы хотите загрузить пакет из своего частного репозитория, а не из packagist, в котором есть пакет с тем же именем.
По умолчанию, в composer 2.x, все репозитории являются каноническими. Composer 1.x рассматривал все репозитории как неканонические, и для того, чтобы поменять поведение вручную, вы можете сделать:
{ "repositories": [ { "type": "composer", "url": "https://example.org", "canonical": false } ]}
Вы также можете отфильтровать пакеты, которые репозиторий сможет загрузить, либо выбрав те, которые вы хотите, либо исключив те, которые вы не хотите.
Например, здесь мы хотим выбрать только пакет
foo/bar
и все пакеты из some-vendor/
из
определенного composer репозитория.:
{ "repositories": [ { "type": "composer", "url": "https://example.org", "only": ["foo/bar", "some-vendor/*"] } ]}
А в этом примере мы исключаем toy/package
из
репозитория, который мы, возможно, не захотим загружать в этот
проект.
{ "repositories": [ { "type": "composer", "url": "https://example.org", "exclude": ["toy/package"] } ]}
И only
, и exclude
должны быть
массивами с именами пакетов, которые также могут содержать знаки
(*), которые соответствуют любым символам.\
Игнорировать определенное требование платформы
Если по какой-то причине вы хотите проигнорировать какое-либо
определенное требование платформы, вы можете просто запустить
команду: composer install --ignore-platform-req
php
Она пропустит требование для PHP или конкретной версии. Если вы
собираетесь игнорировать все требования, вам следует использовать
команду, уже доступную в предыдущих версиях
--ignore-platform-reqs
Другие обновления
Есть множество новых мелких возможностей и исправлений ошибок, которые улучшили удобство его использования и качество. Если вам интересно узнать о них больше, ознакомьтесь с описанием к выпуску в гитхаб.