Composer: как установить и подключить библиотеку
Composer — менеджер пакетов для PHP: он скачивает готовые библиотеки, следит за их версиями и подключает их к проекту одной строкой. Библиотеки берутся из каталога Packagist.
Установка
PHP должен быть установлен заранее — урок Что такое PHP и как его запустить. Дальше способ зависит от системы.
Windowsустановщик
Скачайте установщик Composer-Setup.exe со страницы загрузки Composer и запустите его. Он найдёт php.exe и пропишет команду composer в Path. Проверяйте в новом окне PowerShell: в окне, открытом до установки, команды ещё нет.
Ubuntu и Debianпакет из репозитория
sudo apt install composer
composer --versionВерсия в репозитории бывает не самой свежей. Самую новую ставят командами со страницы загрузки — как в macOS.
macOS и другие Linuxкоманды с сайта Composer
Выполните в терминале команды со страницы загрузки Composer: они скачивают установщик и проверяют его контрольную сумму.
Проверка — composer --version: команда выводит номер версии Composer. Composer работает в папке проекта и прав root не требует.
Не запускайте Composer от root и через sudo в папке проекта: пакеты могут выполнять свои скрипты при установке, и с правами root они получат доступ ко всей системе. Composer сам предупреждает об этом.
Добавить библиотеку
Перейдите в папку проекта и выполните composer require с именем пакета. Например, библиотека для записи журнала Monolog (вместо ~/my-site — папка вашего проекта):
cd ~/my-site
composer require monolog/monologComposer создаст:
composer.json— список нужных пакетов и их версий;composer.lock— точные версии, которые поставлены;- папку
vendor— сами библиотеки и файл автозагрузки.
Подключать библиотеки по отдельности не нужно — достаточно одного файла vendor/autoload.php:
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
require __DIR__ . '/vendor/autoload.php';
$log = new Logger('app');
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log'));
$log->info('Сайт запущен');Monolog\Logger — полное имя класса: Monolog — пространство имён (приставка библиотеки, чтобы её классы не путались с чужими), Logger — сам класс. use даёт классу короткое имя: дальше в файле можно писать Logger вместо Monolog\Logger.
Главные команды
| Команда | Что делает |
|---|---|
composer require пакет | добавить пакет в проект |
composer require --dev пакет | пакет только для разработки (тесты, отладка) |
composer install | поставить пакеты точно по composer.lock |
composer update | обновить пакеты до новых допустимых версий и переписать composer.lock |
composer remove пакет | удалить пакет |
composer dump-autoload | пересобрать автозагрузку после правки composer.json |
Автозагрузка своих классов
Composer умеет подключать и ваши классы. Допишите в composer.json раздел autoload — по правилу PSR-4 (общепринятое правило: имя класса соответствует пути к файлу):
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Если в файле уже есть другие разделы (require), добавьте autoload рядом с ними через запятую. Затем выполните composer dump-autoload. Теперь класс App\Models\User ищется в файле src/Models/User.php, и require для него писать не нужно. Файл начинается со строки namespace App\Models;, класс называется так же, как файл.
Git и сервер
- В репозиторий кладут
composer.jsonиcomposer.lock, а папкуvendor— нет: добавьте её в.gitignore. - На сервере после выкладки выполните
composer install --no-dev— поставятся ровно те версии, что проверены у вас, без пакетов для разработки.
Частые ошибки
composer: command not foundили «не распознано как имя командлета» — Composer не установлен или терминал открыт до установки.Your requirements could not be resolved— пакету нужна другая версия PHP или расширение (ext-mbstring,ext-curl). В сообщении написано, чего не хватает: поставьте расширение или подходящую версию пакета.Class "…" not found— не подключёнvendor/autoload.php, опечатка вuseили после правкиautoloadне выполненcomposer dump-autoload.
Пакет — это чужой код, который будет работать на вашем сервере. Берите популярные библиотеки с живой поддержкой и проверяйте точное имя пакета на Packagist: похожие имена бывают у поддельных пакетов.