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