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 команда
Зміст