Composer – популярный менеджер пакетов (или менеджер зависимостей) PHP, с помощью которого процесс установки пакетов (или библиотек) для ваших сайтов и проектов значительно упрощается. При установке любого пакета, Composer проверяет его зависимости и скачивает их требуемые версии вместе с запрошенным вами пакетом. Работать с ним очень удобно и далее вы узнаете как установить Composer на Ubuntu и как правильно использовать его в ваших проектах.
Установка Composer на Ubuntu
Вы можете установить Composer из репозитория Ubuntu:
sudo apt install composer
Но в таком случае вы получите далеко не самую свежую его версию. Например на Ubuntu 22.04 будет установлена версия 2.2.6 (февраль 2022). Проблем с ее использованием у вас не будет, но если вы все же хотите получить последнюю версию Composer, то используйте его собственный установщик.
Сначала установим требуемые пакеты:
sudo apt install php-cli unzip
Затем загрузим установщик:
curl -sS https://getcomposer.org/installer -o composer-setup.php
Далее выполним установку Composer. Лучше устанавливать его глобально, чтобы все ваши пользователи могли использовать его.
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
После успешного завершения установки, выполним команду composer
и убедимся, что он работает:
Если вы видите примерно то же самое, значит установка завершена.
Локальная установка Composer
Если у вашего пользователя нет прав sudo или вы просто хотите иметь отдельный исполняемый модуль Composer в каждом вашем проекте, то вы можете загрузить установщик composer-setup.php как описано выше, затем создать исполняемый модуль следующим образом:
php composer-setup.php
Таким образом, в каталоге, где вы находитесь, будет создан файл composer.phar, который необходимо запускать с помощью команды php composer.phar
Но далее по тексту я буду использовать примеры с Composer, полноценно установленным в системе.
Использование Composer
Предположим, у вас есть какой-то проект или сайт и вы ходите использовать в нем библиотеку, для примера пусть это будет monolog – библиотека, позволяющая направлять ваши логи в файлы, сокеты, базы данных и различные веб-сервисы. Для этого вам потребуется файл composer.json, который указывает Composer, какие зависимости нужно загрузить для вашего проекта и какие именно версии пакетов использовать. Для стабильной работы проекта это делать крайне необходимо, поскольку так вы будете контролировать совместимость пакетов с вашей версией PHP и другими пакетами.
Итак, загружать пакеты необходимо в директории вашего проекта, т.е. composer.json и набор пакетов в каждом проекте будут разными и вы будете использовать их независимо друг от друга. Например, если у вас один сайт или проект работает на PHP 7, а другой на PHP 8, вы сможете использовать monolog в обоих проектах, просто у него будут разные версии.
Если вы планируете разработать свой пакет для загрузки его в общедоступный репозиторий Packagist в будущем или вы просто хотите, чтобы в вашем composer.json было название вашего проекта, то перед тем, как загружать пакет, выполните команду composer init
Это запустит генератор конфигурации, который в первую очередь предложит вам указать название вашего пакета. Все пакеты в Composer имеют названия в следующем формате: автор/пакет
Затем вы можете указать описание, авторов и прочее. В самом конце вы сможете выбрать зависимости для вашего пакета в интерактивном режиме, но я не буду на этом останавливаться. По завершению будет создан composer.json с данными вашего проекта:
{
"name": "alex/test",
"description": "Test description of project",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Alex"
}
],
"require": {}
}
Загрузка пакетов
Теперь мы можем загрузить нужный нам пакет и делается это с помощью команды composer require
composer require monolog/monolog
Если вы не использовали composer init
, то в процессе будет автоматически создан файл composer.json со следующим содержимым:
{
"require": {
"monolog/monolog": "^2.9"
}
}
В противном случае в существующем composer.json будет обновлен раздел require.
Здесь вы можете заметить необычное указание версии: ^2.9
. Символ перед версией указывает Composer, что для проекта можно загружать monolog >= 2.9 и < 3.0, проще говоря мы разрешаем использовать более новые версии только в пределах мажорной версии 2, например будет разрешено обновиться до 2.9.1 или 2.9.9, но запрещено обновляться до 3.0. Более подробно об ограничении версий вы можете узнать из документации Composer.
Помимо файла composer.json в директории вашего проекта появится папка vendor, где находятся файлы самих пакетов и их зависимостей. При переносе проекта на другой сервер или в другую среду, папку vendor не переносят, нужно переносить только composer.json. Соответственно, если вы разворачиваете проект, в котором уже есть composer.json, вам достаточно перейти в директорию проекта и выполнить команду composer install
, которая автоматически установит все необходимые зависимости для проекта.
Обновление пакетов
Если вы хотите обновить все зависимости вашего проекта, выполните следующую команду:
composer update
Если будут найдены новые версии используемых библиотек, которые соответствуют требованиям и ограничениям вашего composer.json, Composer обновит их.
Вы также можете обновить отдельно один или несколько пакетов:
composer update monolog/monolog guzzlehttp/guzzle
Подключение пакетов
Для подключения пакетов непосредственно в ваш PHP скрипт, достаточно подключить скрипт автозагрузки, любезно предоставляемый Composer. Для проверки создадим файл test.php, подключим скрипт автозагрузки и будем использовать инструменты библиотеки monolog.
Подключаем скрипт автозагрузки:
require __DIR__ . '/vendor/autoload.php';
Если файл test.php находится в корневой директории вашего проекта, рядом с папкой vendor, этого будет достаточно. Если же нет – измените путь под ваши нужды.
Используем пространства имен, согласно инструкциям библиотеки:
use Monolog\Level;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
Создаем логгер для дебага в файл:
$logger = new Logger('test');
$logger->pushHandler(new StreamHandler(__DIR__.'/test.log', Level::Debug));
Добавляем записи в лог:
$logger->info('Test log entry');
Теперь можете запустить ваш скрипт. Если путь к скрипту автозагрузки был указан верно, не должно возникнуть никаких ошибок и вы увидите новый файл test.log с созданной вами записью.
На этом я завершаю статью. Удачи в использовании Composer!