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 команда