Установка и использование Composer на Ubuntu

Composer на Ubuntu

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

Если вы видите примерно то же самое, значит установка завершена.

Локальная установка 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!