2.8.3.2. Робота з Composer

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. Він містить список бібліотек та їх версій, необхідних для роботи проекту.

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

У файлі composer.lock зберігається поточний список встановлених залежностей та їх версій. Необхідний для того, щоб у тих, хто клонує проект, було ідентичне пакетне середовище (були встановлені той самий набір бібліотек з тими самими версіями).

При виконанні install Composer в першу чергу спирається на вміст composer.lock. При кожному виконанні update версії оновлених пакетів прописуються в composer.lock.

composer.lock містить хеш файлу composer.json. Якщо json-файл був відредагований, Composer видасть попередження про невідповідність lock-файлу з json-файлом. У цьому випадку потрібно буде оновити composer.lock командою update –lock.

Встановлення виконується командою:

composer install

У результаті Composer:

  1. Перевірить наявність composer.lock:
    1. Якщо він існує, візьме з нього назви потрібних пакетів та їх версії.
    2. Якщо його немає, зчитає вміст файлу composer.json і візьме з нього назви потрібних пакетів та їх версії.
  2. Завантажить/встановить пакети потрібних версій у каталог vendor.
  3. Автоматично сформує файл autoload.php.
  4. Якщо файлу composer.lock не було, створить його.

Щоб проект міг звертатися до встановлених бібліотек, достатньо підключити autoload.php:

require_once '../vendor/autoload.php';

Оновлення виконується командою:

composer update

У результаті Composer:

  1. Перевірить вміст composer.json.
  2. Визначить останні версії на основі даних з цього файлу.
  3. Встановить останні версії пакетів.
  4. Оновить 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

Якщо Composer повідомляє, що пакет вимагає версії PHP не нижче тієї, що вказана в тексті помилки, встановіть цю версію, перевизначивши змінну PATH за інструкцією, після чого повторно виконайте команду Composer, при якій виникла помилка.

Якщо під час виконання будь-якої команди composer виникає помилка «Fatal error: Allowed memory size of XXX bytes exhausted», спробуйте запустити її таким чином:

php -d memory_limit=-1 /usr/local/bin/composer команда
Зміст

    (2)