Skip to content

Основы PHP: Composer

Composer — это менеджер зависимостей для PHP. Он позволяет объявлять зависимости вашего проекта и устанавливает (или обновляет) их. Composer решает проблемы, связанные с ручным скачиванием и подключением библиотек, а также управляет их автозагрузкой.

Основные понятия Composer

  • Пакет (Package): Обычно это библиотека или набор библиотек, распространяемых через Composer. Пакеты могут содержать PHP-код, изображения, CSS, JavaScript и другие ресурсы.
  • Зависимость (Dependency): Пакет, от которого зависит ваш проект для своей работы.
  • composer.json: Файл в корне вашего проекта, который описывает зависимости проекта, требования к PHP и другие метаданные.
  • composer.lock: Файл, который содержит точные версии установленных пакетов. Этот файл гарантирует, что при повторной установке зависимостей будут использованы те же самые версии.
  • vendor: Директория в корне вашего проекта, куда Composer устанавливает все зависимости.
  • Packagist: Главный публичный репозиторий пакетов Composer (https://packagist.org/).

Установка Composer

Прежде чем использовать Composer, его необходимо установить на вашем компьютере. Инструкции по установке для различных операционных систем можно найти на официальном сайте Composer: https://getcomposer.org/download/.

После установки вы сможете использовать команду composer в своей командной строке или терминале.

Использование Composer

1. Создание файла composer.json

В корне вашего PHP-проекта создайте файл с именем composer.json. Этот файл описывает зависимости вашего проекта. Вот пример простого файла composer.json:

json
{
    "name": "имя_вашего_вендора/имя_вашего_проекта",
    "description": "Описание вашего проекта",
    "type": "project",
    "require": {
        "monolog/monolog": "^2.7",
        "guzzlehttp/guzzle": "^7.4"
    },
    "autoload": {
        "psr-4": {
            "YourNamespace\\": "src/"
        }
    },
    "minimum-stability": "stable"
}

Разберем основные секции:

  • name: Уникальное имя вашего пакета (обычно в формате vendor/package). Для конечных проектов это может быть имя вашей организации/проекта и имя самого проекта.
  • description: Краткое описание вашего проекта.
  • type: Тип пакета (например, project, library, metapackage). Для большинства веб-проектов используется project.
  • require: Объект, содержащий список зависимостей вашего проекта. Ключи — это имена пакетов (например, monolog/monolog), а значения — ограничения по версии (например, ^2.7).
    • Ограничения по версии: Composer поддерживает различные способы указания версий:
      • = : Точная версия (например, "1.2.3")
      • > , < , >= , <= , != : Операторы сравнения (например, ">1.0")
      • ^ (caret): Совместимые обновления в пределах основной версии (например, "^2.7" означает 2.7.* и выше, но меньше 3.0.0). Рекомендуется для большинства случаев.
      • ~ (tilde): Совместимые обновления в пределах последней указанной минорной версии (например, "~1.2" означает 1.2.* и выше, но меньше 1.3.0).
      • * : Любая версия.
      • Диапазоны (например, ">=1.0, <2.0").
  • autoload: Секция, описывающая, как Composer должен автоматически загружать классы вашего проекта.
    • psr-4: Наиболее распространенный стандарт автозагрузки PSR. Указывает соответствие между пространствами имен PHP и директориями в вашем проекте. В примере все классы из пространства имен YourNamespace\ будут автоматически загружаться из директории src/.
  • minimum-stability: Указывает минимальный уровень стабильности пакетов, которые Composer будет рассматривать при установке и обновлении (stable, beta, alpha, dev). По умолчанию — stable.

2. Установка зависимостей

После создания файла composer.json перейдите в корневую директорию вашего проекта в командной строке и выполните команду:

bash
composer install

Composer прочитает файл composer.json, скачает указанные пакеты и их зависимости, и установит их в директорию vendor/. Также будет создан файл composer.lock, в котором будут зафиксированы точные версии установленных пакетов.

При последующих запусках composer install Composer будет использовать файл composer.lock для установки тех же самых версий пакетов.

3. Обновление зависимостей

Чтобы обновить зависимости до последних совместимых версий, указанных в composer.json, выполните команду:

bash
composer update

Composer обновит пакеты (если есть новые совместимые версии), обновит файл composer.lock и перезапишет файл vendor/autoload.php.

4. Автозагрузка классов

Composer автоматически генерирует файл vendor/autoload.php. Подключив этот файл в своем PHP-скрипте, вы сможете использовать классы из установленных пакетов без необходимости вручную подключать каждый файл.

php
<?php
require 'vendor/autoload.php';

// Теперь вы можете использовать классы из установленных пакетов
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use GuzzleHttp\Client;

// create a log channel
$log = new Logger('my_app');
$log->pushHandler(new StreamHandler('app.log', Logger::WARNING));

// add records to the log
$log->warning('Foo');
$log->error('Bar');

$client = new Client(['base_uri' => '[https://httpbin.org](https://httpbin.org)']);
$response = $client->request('GET', '/ip');
echo $response->getBody();
?>

5. Добавление новых зависимостей

Чтобы добавить новую зависимость в свой проект, вы можете вручную отредактировать файл composer.json в секции require и затем выполнить composer update.

Более удобный способ — использовать команду require в Composer:

bash
composer require имя_пакета:ограничение_версии

Например, чтобы добавить библиотеку Carbon для работы с датой и временем:

bash
composer require nesbot/carbon:^2.60

Composer автоматически добавит эту зависимость в ваш composer.json и установит ее (или обновит, если она уже была указана).

6. Удаление зависимостей

Чтобы удалить зависимость, вы можете отредактировать composer.json, удалив соответствующую строку из секции require, и затем выполнить composer update.

Или используйте команду remove:

bash
composer remove имя_пакета

Например:

bash
composer remove guzzlehttp/guzzle

7. Скрипты Composer

В файле composer.json можно определить скрипты, которые будут выполняться при определенных событиях Composer (например, после установки или обновления зависимостей).

json
{
    "scripts": {
        "post-install-cmd": [
            "php artisan optimize:clear",
            "php artisan config:cache"
        ],
        "post-update-cmd": [
            "Composer\\Config::disableProcessTimeout",
            "php artisan migrate --force"
        ]
    }
}

8. Публикация собственных пакетов

Если вы разрабатываете библиотеку, которую хотите использовать в нескольких проектах или поделиться с сообществом, вы можете опубликовать ее на Packagist. Для этого необходимо создать файл composer.json для вашей библиотеки и следовать инструкциям на сайте Packagist.

Преимущества использования Composer

  • Управление зависимостями: Автоматически скачивает и устанавливает нужные библиотеки и их зависимости.
  • Автозагрузка: Упрощает подключение классов из сторонних библиотек и вашего собственного кода.
  • Стандартизация: Способствует использованию стандартных библиотек и лучших практик в PHP-разработке.
  • Управление версиями: Позволяет указывать ограничения по версиям зависимостей и контролировать обновления.
  • Сообщество: Доступ к огромному количеству готовых пакетов на Packagist.

Composer стал неотъемлемой частью современной PHP-разработки. Использование Composer значительно упрощает управление зависимостями и повышает эффективность разработки.