Вступление
Composer это великолепный инструмент управления зависимостями для PHP. Основная задача - это отслеживание обновлений, скачивание и установка библиотек, использование которых задекларировано в проекте. Composer не является стандартным менеджером пакетов, потому что не используется в системе глобально, а применяется в каждом отдельном проекте индивидуально.
Зачем его использовать? Например, у имеется проект приложения, который зависит от нескольких библиотек, эти библиотеки, в свою очередь, могут зависеть от других библиотек. После того, как вы объявляете, эти зависимости в небольшом файла конфигурации проекта с расширением .json, Composer будет устанавливать все используемые библиотеки корректно и со всеми необходимыми для их работы зависимостями, а также при необходимости будет выполнять их обновления в приложении.
В этом руководстве, мы установим Composer на VPS и увидим как он работает и что можно делать с его помощью. Я буду использовать сервер под управлением Ubuntu с установленным LAMP стеком. Composer не прихотлив по требование и будет работать на операционной системе Linux, OS X или Windows с установленной версией PHP 5.3.2 и выше.
Убедитесь, что у Вас установлены все необходимые приложения:
sudo apt-get install php5 git php5-curl
Установка
Сначала, нужно скачать Composer в папку вашего проекта. Для этого мы создадим в корневой директории веб-сервера Apache /var/www пустую поддиректорию с названием my_project:
cd /var/www mkdir my_project cd my_project
Скачаем Composer в эту директорию при помощи следующей команды:
curl -sS https://getcomposer.org/installer | php
Вы должны увидеть сообщение о успешном выполнении операции, наподобие этого:
All settings correct for using Composer Downloading... Composer successfully installed to: /var/www/my_project/composer.phar Use it: php composer.phar
Теперь если проверить папку проекта, то моно увидеть один единственный файл, который мы только что скачали: composer.phar - это PHP архив, который может быть запущен прямо из командной строки.
Для того, чтобы скачать и установить Composer в какую-либо другую папку вне проекта, можете указать опцию --install-dir:
curl -sS https://getcomposer.org/installer | php -- --install-dir=/var/www/another_folder
Эту команду можно выполнить из любой точки файловой системы и установить Composer в директорию another_folder расположенную в /var/www. Для проверки работоспособности Composer, можете использовать выполнить команду и почитать список доступных команд:
php composer.phar
Использование Composer
Для использования Composer в проекте, Вам понадобится создать файл: composer.json. В этом файле нужно описать зависимости Вашего проекта. Давайте предположим, что мы используем в проекте популярную библиотеку KnpPaginatorBundle, которая используется в Symfony2 для постраничного разбиения вывода в объектно ориентированном стиле. Итак, создаем файл:
nano composer.json
И прописываем в него следующее:
{ "require": { "knplabs/knp-menu-bundle": "*@dev", } }
Или можно так:
composer require knplabs/knp-paginator-bundle
В этом случае Composer сам пропишет данный бандл в файл зависимостей composer.json, предварительно спросив какую версию из репозитория использовать.
Если Вы решили писать в файл напрямую, то сохраните его и закройте. В этом простом коде, Вы определили использование в проекте бандла/библиотеки с названием knp-menu-bundle созданной вендором/разрабочиком knplab, затем указана используемая версия из репозитория. В этом примере будет использоваться версия dev-master, или указывайте какую-либо стабильную версию, например 1.2.1. Версии можно указывать со звездочкой, что будет обозначать использование любой доступной версии из ветки репозитория. Но Вы конечно спросите где брать информацию о библиотеках?
Есть отличный веб-сайт где можно тонны библиотек на любой вкус и под любые нужды, а также всю необходимую информацию для составления конфигурации в файле composer.json: Packagist. Либа из нашего примера, естественно, тоже доступна на Packagist. Там есть вся информацию о доступных версиях для корректного описания зависимости в блоке require конфигурационного файла.
Если использовать подстановочные выражения, то строка конфигурации может выглядеть следующим образом:
"knplabs/knp-menu-bundle": "1.2.*"
Т.о. будет загружена последняя доступная версия ветки начинающаяся с 1.2 (1.2.0, 1.2.1, и т.д.). Ну и конечно в файл можно писать очень много зависимостей. Просто добавляйте их друг за другом в формате JSON в секцию require:
"require": { "knplabs/knp-menu-bundle": "1.2.1", "acme/foo": "1.0" }
Теперь, когда все зависимости описаны, нужно запустить Composer чтобы из скачать и установить в наш проект:
php composer.phar install
Будут скачаны все последние нужные библиотеки в соответствии с указанными значениями нужных нам версий. Они будут загружены в директорию /vendor вашего проекта. В нашем примере библиотека будет находиться в директории vendor/knplabs/knp-menu-bundle. Дополнительно, Composer создаст файл composer.lock в котором будут указаны точные версии установленных библиотек.
Задача .lock файла состоит в том чтобы ограничить Composer от установки других версий в проект. Итак, при запуске команды установки, Composer проверит этот файл и сопоставит уже установленные библиотеки с теми которые описаны в файле .json для установки. Это очень удобно при деплое вашего веб-приложения на продакшин сервер, т.к. можно быть точно уверенным что установлены все те же самые версии библиотек, которые использовались на этапе разработки.
Если удалить файл-лочку .lock, то Composer создаст его заново на основании зависимостей установленных из конфигурационного файла .json. Но если есть необходимость переписать файл .lock проапдейтить зависимости до более свежих версий, то выполните следующую команду:
php composer.phar update
При этом будут скачаны новые стабильные версии библиотек в соответствии с критериями в файле composer.json и переписан файл composer.lock новыми зависимостями. Если нужно обновить только одну или несколько определенных библиотек, то нужно выполнить команду update с указанием названия библиотеки которую нужно обновить в следующем формате:
php composer.phar update vendor/package vendor/package2
Или можно указать для обновления символ подстановки для обновления всех библиотек конкретного разработчика:
php composer.phar update vendor/*
Автозагрузка
Другая крутая фича Composer - это автозагрузчик классов. Для библиотек, которые предоставляют информацию автозагрузки, Composer автоматически генерирует файл autoload.php прямо в директории /vendor который можно заинклудить в код и просто использовать классы библиотек согласно их неймспесов. Т.е. в PHP проекте, достаточно просто прописать:
require 'vendor/autoload.php';
И все! Больше никаких проблем с множественными инклудами и рекваерами!
Заключение
Composer все чаще используется в мире PHP и все больше проектов и фреймворков используют его для управления и установки своих пакетов и рабочих зависимостей. Поэтому, если Вы дочитали до этого места, надеемся что Композер сделает Вашу жизнь программиста комфортнее и легче и теперь можно больше времени уделять качественному коду и меньше рутинным операциям.
Оригинальная статья: How To Install and Use Composer on Your VPS Running Ubuntu
Перевод: Игорь Пастух
Add new comment