Composer 2.0 тепер доступний!


Composer 2.0 тепер доступний!

Що нового в Composer 2.0?

Список змін та вдосконалень довгий, перегляньте повний список змін, якщо вам цікаво прочитати це все.  Тут я виділю кілька ключових моментів.


Покращення продуктивності

Ми переглянули майже все - від протоколу, що використовується між Composer та Packagist.org, до розв’язання залежностей, включаючи паралельне завантаження файлів за допомогою оптимізації оцінки curl та обмежень.  Це призводить до значних поліпшень як з точки зору швидкості, так і використання пам'яті.  Різниця залежить від вашого варіанту використання, тому, хоча в деяких проектах я бачив повідомлення про покращення обох на 50%, я не можу вказати точну цифру.  Але я впевнений, ви будете позитивно здивовані, якщо ще не спробували Composer 2.

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

Composer 2.0 що нового?

Час для початкового оновлення + встановлення (завантажений проект, порожній кеш) показує приблизно на 60% менше часу, який використовує Composer 2 з увімкненою функцією ext-curl

Архітектурні зміни та детермінізм

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

Після завершення оновлення процес встановлення запускається автоматично, і він спочатку виконуватиме всі операції, пов’язані з мережею, і паралельно, якщо це можливо.  Це дозволить уникнути залишення вам напів оновленого каталогу постачальника, якщо мережева помилка трапиться посередині встановлення.
Особливості виконання

Ми додали крок перевірки платформи, коли постачальник / autoload.php отримує ініціалізацію, яка перевіряє поточну версію PHP (і, за бажанням, розширення), що відповідає очікуваним вашим залежностям, і в іншому випадку не вдається.  Це ввімкнено за замовчуванням, тому обов’язково прочитайте його, щоб уникнути сюрпризів.

Існує новий клас Composer \ InstalledVersions, який автоматично завантажується в кожен проект і доступний під час виконання.  Це дозволяє перевірити, які пакети / версії присутні під час виконання вашого власного проекту.

Докладніше дивись у документації до середовища виконання.

Якщо ваш код покладається на будь-яку з цих функцій виконання, вам слід вимагати "composer-runtime-api": "^ 2.0" у вашому composer.json.  Це віртуальний пакет, який надає Composer і гарантує, що людям доведеться використовувати Composer 2.x для встановлення вашого пакету.

Вдосконалення звіту про помилку виконання

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

Часткові оновлення з тимчасовими обмеженнями

Іноді може бути корисно оновити або знизити один пакет до певної версії, можливо тимчасово, щоб протестувати щось або почекати виправлення помилки.  Тепер ви можете запустити постачальник / пакет оновлення composer: 1.0. *, Наприклад (або 1.0.12 або будь-яке інше обмеження версії), щоб запустити оновлення лише постачальника / пакета до версії, що відповідає цьому додатковому обмеженню.  Це не оновить ваші вимоги в composer.json і не позначить файл блокування застарілим.

Якщо ви хочете додати / обмежити обмеження, але все-таки виконати повне оновлення всіх залежностей, ви можете використовувати update --with vendor / package: 1.0. *, Який запустить оновлення з цим додатковим обмеженням.

Наскільки просто оновити?

Наша мета полягає в тому, що кожен користувач Composer може плавно та швидко оновлюватись.  Вигоди величезні, і ми хочемо, щоб усі отримали від них вигоду.  Для цього ми зробили кілька речей:

Якщо ви запустите самооновлення композитора з 1.x, він попередить вас, що доступна нова стабільна основна версія Composer, і ви можете використовувати самооновлення композитора --2, щоб перейти до нього.

Якщо у вас виникнуть проблеми, ви можете повернутися назад у будь-який час за допомогою самооновлення композитора --1.  Сподіваємось, це змусить усіх почуватись комфортно експериментувати з новим випуском.

Якщо ви автоматично встановлюєте Composer зі сценарію програми встановлення і хочете поки що залишатися на Composer 1.x, ви також можете передати йому аргумент --1, щоб запобігти встановленню Composer 2.0 за замовчуванням.  Якщо ви зробите це, будь ласка, пам’ятайте і прагніть оновити своєчасно, оскільки Composer 1.x не буде підтримуватися дуже довго.

Перегляд команди "самостійне оновлення" не визначений.  ?  Якщо ви встановили Composer через менеджер пакетів ОС, команда самооновлення може бути недоступною. Використовуйте, який композитор, щоб знайти його шлях (наприклад, / usr / bin / composer), а потім запустіть скрипт встановлення, додавши --install-dir / usr / bin --filename composer (налаштувавши директорію встановлення відповідно до вашого шляху) до композитора php  -setup.php рядок.

Порушення зворотної сумісності?

Ось основні речі, які можуть спричинити проблеми з процесом оновлення:

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

Що далі?

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

Як я вже згадував вище, Composer 2.0 підтримує PHP 5.3+, що на даний момент дуже застаріле і робить код досить важким для обслуговування місцями.  Ми доклали зусиль, щоб переконатись, що кожен користувач Composer може перейти на Composer 2, але план полягає у відмові від підтримки версій EOL PHP у наступному незначному випуску.

Composer 2.1 все ще може мати підтримку PHP 5.3, залежно від часової шкали та того, які функції в підсумку будуть включені, але не пізніше, ніж Composer 2.2, ми припинимо підтримку для всього, що перебуває у PHP 7.1.3.  Відповідно до нашої статистики, це дозволяє понад 90% користувачів Composer використовувати останню версію, а для інших, хто затримується на застарілих версіях PHP, ми продовжуватимемо надавати критичні виправлення помилок та безпеки в діапазоні 2.0.x або 2.1.x.

Що стосується Composer 1.x, то зараз це більш-менш EOL.  Він також отримає критичні виправлення, якщо щось з’явиться, але метою кожного має бути якнайшвидший перехід на 2.x.

Нарешті, я хочу подякувати усім, хто сприяв і допоміг втілити це в реальність.  Випуск 2.0 представляє понад 1100 комітів від 28 людей, понад 150 видань GitHub та запитів на витягування, а також усіх, хто його тестує, переглядає PR тощо. Перші коміти, зроблені близько двох років тому, доклали величезних зусиль.

Я також хочу подякувати усім нашим клієнтам Private Packagist, які допомогли фінансувати ці зусилля та виділили нам час, який ми витратили на все це.  Ми щиро сподіваємось, що всі оцінять результат!

Джерело