Composer 2: Що нового?

Composer 2: Що нового?
6 хв. читання
27 жовтня 2020

Composer, менеджер залежностей для PHP, був випущений близько 8 років тому, а сьогодні опублікували нову версію, 2.0. За ці роки Composer отримав безліч нових функцій і не відставав від стандартів PHP. Друга версія сумісна зі старими проєктами, але привнесе ще кілька чудових нових функцій. У цій статті розповім про них докладніше.

Прискорення та оптимізація

У цьому релізі була покращена продуктивність. Тепер він не враховує вже встановлені пакети, в результаті оновлення проходить набагато швидше. Також покращили роботу з пам'яттю і процесором.

Команда установки стала розумнішою. Тепер вона не змінює теку vendor до тих пір, поки не гарантує, що всі пакети встановлені. Це дозволяє уникнути втрати часу на їх видалення в разі помилок під час процесу.

Однією з кращих функцій, для мене, стало паралельне завантаження, яке тепер підтримується з коробки, і нам не потрібно встановлювати додаткові пакети, як hirak/prestissimo, щоб це працювало.

Composer v2 майже в 2 рази швидше, при установці laravel / laravel без кешування.
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

Інші оновлення

Є безліч нових дрібних можливостей і виправлень помилок, які поліпшили зручність його використання та якість. Якщо вам цікаво дізнатися про них більше, ознайомтеся з описом до випуску в гітхаб.

Джерело: Composer 2.0 released

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація