2.8.3.2. Робота з Composer
Composer — пакетний менеджер для PHP. Він дозволяє завантажувати/оновлювати з офіційного репозиторію packagist.org використовувані проектом бібліотеки та їх залежності. За рахунок цього кожну з них не потрібно завантажувати і підключати вручну, а також немає необхідності зберігати їх безпосередньо в самому проекті, що зменшує його розміри.
Детальна інформація по роботі з Composer представлена в офіційній документації.
Загальна інформація
Запуск
Запуск Composer виконується наступним чином:
composer
Якщо версія PHP, яка використовується для запуску Composer, відрізняється від версії, що відображається при його роботі, виконайте команду:
export PATH=/usr/local/php73/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
Замість php73
вкажіть потрібну версію PHP.
Команди
install
— встановлення пакетів, перерахованих вcomposer.json
. Пакети встановлюються в той каталог, з якого була виконана команда.update
— оновлення всіх пакетів (якщо будь-які пакети були випадково видалені, вони будуть автоматично встановлені).update package/name
— оновлення конкретного пакета.dumpautoload
— пересстворення автозавантажувача.require somepackage/somepackage:someversion
— додавання нового пакета (за замовчуванням пакети встановлюються з офіційного репозиторія). При встановленні пакет прописується вcomposer.json
.update –lock
— оновлення файлу блокуванняcomposer.lock
.–profile
— додавання цього параметра до будь-якої команді включить показ часу виконання та об’єму використаної пам’яті.–verbose
— детальна інформація про виконувану операцію.show
— список встановлених пакетів з описом кожного.show –platform
— відомості про PHP.–dry-run
— репетиція виконання команди. Може додаватися до командinstall
таupdate
. Емулює виконання команди без її безпосереднього виконання. Необхідний для того, щоб перевірити, чи пройде встановлення пакетів і залежностей успішно.remove
— видалення пакета. Точна протилежністьrequire
.
composer.json
composer.json
— це ключовий файл для роботи Composer. Він містить список бібліотек і їх версій, необхідних для роботи проекту.
Кожен з пакетів також має власний composer.json
, в якому перераховуються всі його залежності. Цей файл формується розробником пакета. Схема файлу доступна на офіційному сайті.
composer.lock
У файлі composer.lock
зберігається поточний список встановлених залежностей та їх версій. Необхідно для того, щоб у тих, хто клонує проект, було ідентичне пакетне оточення (був встановлений такий самий набір бібліотек з такими самими версіями).
При виконанні install
Composer в першу чергу спирається на вміст composer.lock
. При кожному виконанні update
версії оновлених пакетів прописуються в composer.lock
.
composer.lock
містить хеш файлу composer.json
. Якщо json-файл був відредагований, Composer видасть попередження про невідповідність lock-файлу з json-файлом. В цьому випадку потрібно буде оновити composer.lock
командою update –lock
.
Робота з пакетами
Встановлення
Встановлення виконується командою:
composer install
В результаті Composer:
- Перевірить наявність
composer.lock
:- Якщо він існує, візьме з нього назви потрібних пакетів і їх версії.
- Якщо його немає, зчитає вміст файлу
composer.json
і візьме з нього назви потрібних пакетів і їх версії.
- Завантажить/встановить пакети потрібних версій в каталог
vendor
. - Автоматично сформує файл
autoload.php
. - Якщо файлу
composer.lock
не було, створить його.
Щоб проект міг звертатися до встановлених бібліотек, досить підключити autoload.php
:
require_once '../vendor/autoload.php';
Оновлення
Оновлення виконується командою:
composer update
В результаті Composer:
- Перевірить вміст
composer.json
. - Визначить останні версії на основі даних з цього файлу.
- Встановить останні версії пакетів.
- Оновить
composer.lock
відповідно до встановлених пакетів.
Додавання
Для визначення необхідного пакету використовується команда require
, яка вбудовується в файл composer.json
, або ж використовується команда в консолі:
composer require постачальник/пакет версія
Вказання залежностей в файлі composer.json
проводиться таким чином:
"require": { "постачальник/пакет1": "версія", "постачальник/пакет2": "версія", "постачальник/пакет3": "версія" }
постачальник
(vendor) — постачальник бібліотеки, яка буде встановлена.пакет
— ім’я пакета, що надається постачальником.версія
— версія запитуваної бібліотеки. Якщо не вказувати, то буде встановлена остання версія пакету. Для роботи з версіями використовуються цифрові (1.2.1
,3.5.1
) або ж текстові позначення (dev-master
,master
). Також можна використовувати неточні позначення за допомогою стандарту, описаного в SemVer.
Наприклад, для встановлення пакета monolog
потрібно виконати команду:
composer require "monolog/monolog"
Або вказати в файлі composer.json
рядки:
{ "require": { "monolog/monolog": "*" } }
Після чого виконати в консолі:
composer update
Видалення
Для видалення пакетів потрібно видалити з файлу composer.json
рядки зі згадуванням. Наприклад, для Monolog потрібно видалити:
"monolog/monolog": "*"
Після чого потрібно в консолі виконати команду:
composer update
Або ж можна виконати в консолі команду:
composer remove monolog/monolog
Можливі проблеми
Помилка «This package requires php >=X.X.X but your HHVM version does not satisfy that requirement»
Якщо Composer повідомляє, що пакет вимагає версії PHP не нижче тієї, що вказана в тексті помилки, встановіть цю версію, перевизначивши змінну PATH
по інструкції, після чого повторіть команду Composer, при якій виникла помилка.
Помилка «Fatal error: Allowed memory size...»
Якщо при виконанні будь-якої команди composer виникає помилка «Fatal error: Allowed memory size of XXX bytes exhausted», спробуйте запустити її в такий спосіб:
php -d memory_limit=-1 /usr/local/bin/composer команда