--- category: tool tool: composer contributors: - ["Alesey Lysenko", "https://github.com/nasgul"] filename: LearnComposer.sh lang: ru-ru --- [Composer](https://getcomposer.org/) это инструмент управления зависимостями в PHP. Он позволяет вам декларировать библиотеки, от которых зависит ваш проект, и он будет управлять (устанавливать / обновлять) их для вас. # Установка ```sh # Устанавливаем composer.phar в текущую папку curl -sS https://getcomposer.org/installer | php # Если вы используете этот подход, вам нужно будет вызвать композер следующим образом: php composer.phar about # Устанавливаем с бинарников ~/bin/composer # Примечание: убедитесь, что ~/bin находится в переменной PATH вашего окружения curl -sS https://getcomposer.org/installer | php -- --install-dir=~/bin --filename=composer ``` Пользователи Windows должны следовать [Инструкциям по установке в Windows ](https://getcomposer.org/doc/00-intro.md#installation-windows) ## Подтверждение установки ```sh # # Проверить версию и параметры списка composer # Получить дополнительную помощь для параметров composer help require # Проверьте, способен ли Composer делать то, что ему нужно, и если он обновлен композитор диагностирует composer diagnose composer diag # shorthand # Обновление Composer к последней версии composer self-update composer self # shorthand ``` # Использование Композитор сохраняет ваши зависимости проекта в `composer.json`. Вы можете отредактировать этот файл, но лучше всего позволить Composer управлять им для вас. ```sh # Создать новый проект в текущей папке composer init # запускается интерактивная анкета с просьбой предоставить подробную информацию о вашем проекте. # Оставляя их пустым, все прекрасно, если вы не делаете другие проекты зависимыми от этого. # Если файл composer.json уже существует, загрузите зависимости composer install # Чтобы загрузить только производственные зависимости, т. Е. Исключая зависимости разработки composer install --no-dev # Добавить зависимость от этого проекта composer require guzzlehttp/guzzle # выяснит, какая последняя версия guzzlehttp / guzzle есть, # загрузите ее и добавьте новую зависимость в поле require.console. composer require guzzlehttp/guzzle:6.0.* # будет загружать последнюю версию, соответствующую шаблону (например, 6.0.2), # и добавить зависимость к полю require.json composer require --dev phpunit/phpunit:~4.5.0 # потребуется как зависимость от разработки. # Будет использовать последнюю версию> = 4.5.0 и <4.6.0 composer require-dev phpunit/phpunit:^4.5.0 # потребуется как зависимость от разработки. Будет использовать последнюю версию> = 4.5.0 и <5.0 # Для получения дополнительной информации о совместимости версий Composer см. # [Документация композитора по версиям] (https://getcomposer.org/doc/articles/versions.md) # для получения более подробной информации # Чтобы узнать, какие пакеты доступны для установки и в настоящее время установлены composer show # Чтобы узнать, какие пакеты в настоящее время установлены composer show --installed # Чтобы найти пакет с «mailgun» в его названии или описании composer search mailgun ``` [Packagist.org](https://packagist.org/) является основным хранилищем для пакетов Composer. Поиск там для существующих сторонних пакетов. ## `composer.json` vs `composer.lock` Файл `composer.json` хранит ваши параметры плавающей версии вашего проекта для каждой зависимости, а также другую информацию. Файл `composer.lock` хранит точно, какую версию он загрузил для каждой зависимости. Никогда не редактируйте этот файл. Если вы включите файл `composer.lock` в свой репозиторий git, каждый разработчик установит текущую версию зависимостей. Даже когда выпущена новая версия зависимости, Composer продолжит загрузку версии, записанной в файле блокировки. ```sh # Если вы хотите обновить все зависимости до их новейшей версии, # которые по-прежнему соответствуют вашим предпочтениям в версии обновление композитора composer update # Если вам нужна новая версия определенной зависимости: composer update phpunit/phpunit # Если вы хотите перенести пакет на более новую версию, # вам может потребоваться сначала удалить старый пакет и его зависимости. composer remove --dev phpunit/phpunit composer require --dev phpunit/phpunit:^5.0 ``` ## Автозагрузчик Composer создает класс автозагрузки, который вы можете потребовать от своего приложения. Вы можете создавать экземпляры классов через их пространство имен. ```php require __DIR__ . '/vendor/autoload.php'; $mailgun = new Mailgun\Mailgun("key"); ``` ### PSR-4 Autoloader ### Автозагрузчик PSR-4 Вы можете добавить свои собственные пространства имен в автозагрузчик. Вы можете добавить свои собственные пространства имен в автозагрузчик. В `composer.json` добавьте поле 'autoload': ```json { "autoload": { "psr-4": {"Acme\\": "src/"} } } ``` Это скажет автозагрузчику искать что-либо в пространстве имен `\ Acme \` в папке `src`. Вы также можете использовать [PSR-0, Classmap или просто список файлов для включения](https://getcomposer.org/doc/04-schema.md#autoload). Также существует поле `autoload-dev` для пространств имен, предназначенных только для разработки. При добавлении или изменении ключа автозагрузки вам необходимо перестроить автозагрузчик: ```sh composer dump-autoload composer dump # shorthand # Оптимизирует пакеты PSR0 и PSR4 для загрузки классов. # Медленно запускается, но улучшает производительность при производстве. composer dump-autoload --optimize --no-dev ``` # Composer Кэш ```sh # Composer сохранит загруженные пакеты для использования в будущем. Очистите его с помощью: composer clear-cache ``` # Поиск проблемы ```sh composer diagnose composer self-update composer clear-cache ``` ## Темы, которые пока (пока) не включены в этот учебник * Создание и распространение ваших собственных пакетов на Packagist.org или в другом месте * Предварительные и пост-скриптовые перехватчики: запуск задач, когда происходят определенные события композитора ### Рекомендации * [Composer - Dependency Manager for PHP](https://getcomposer.org/) * [Packagist.org](https://packagist.org/)