[PHP] Composer 2: Что нового? (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
25-Окт-2020 03:31


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 details
Continue 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Другие обновленияЕсть множество новых мелких возможностей и исправлений ошибок, которые улучшили удобство его использования и качество. Если вам интересно узнать о них больше, ознакомьтесь с описанием к выпуску в гитхаб.
===========
Источник:
habr.com
===========

===========
Автор оригинала: Gabriel Anhaia
===========
Похожие новости: Теги для поиска: #_php, #_php, #_composer, #_composer_pakety (composer пакеты), #_php
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 29-Апр 04:11
Часовой пояс: UTC + 5