- •Что умеет Composer?
- •Рабочий пример: используем Composer в своём проекте
- •Подключаем пакеты с сайта packagist.Org
- •Подключаем на собственный Compsoer-пакет
- •Подключаем произвольный git репозиторий
- •Подключаем простой zip файл
- •Инстукция autoload
- •Запускаем composer install
- •Как создать собственный Composer пакет?
Подключаем пакеты с сайта packagist.Org
{
"require": {
"php":">=5.3.0",
"silex/silex":"dev-master",
"twig/twig":">=1.8,<2.0-dev"
}
}
Здесь я описал зависимость проекта от PHP версии 5.3.0 и выше, от silex (микрофреймворк) и от twig (шаблонизатор). Silex и Twig доступны в виде Composer-пакетов на сайте packagist.org, поэтому дополнительных настроек не требуют. Замечу, что Silex в свою очередь зависит ещё от нескольких пакетов — все они будут скачены и установлены автоматически. Имя пакета состоит из двух частей разделёных косой чертой: названия поставщика (vendor name) и названия библиотеки. Названием поставщика зачастую является ник автора или имя компании. Иногда, название поставщика совпадает с именем самой библиотеки или фреймворка. Для каждого пакета обязательно нужно указать номер версии. Это может быть бранч в репозитории, например, «dev-master» — приставка dev сигнализирует, что это имя бранча, а сам бранч соответсвенно называется «master». Для mercurial репозитория аналогичная запись будет выглядеть как «dev-default». В качестве номера версии можно указать и более сложные правила, используя операторы сравнения. Кстати, если вы скачиваете код из удалённого репозитория, то Composer сканирует теги и имена веток в этом репозитории на предмет чего-то похожего на номера версий, например тег «v1.2.3» будет использован как указатель на версию 1.2.3.
Подключаем на собственный Compsoer-пакет
Далее, подключим наш собственный пакет SuperLogger, который правильно оформлен, но опубликован не на packagist.org, а на github:
{
"require": {
"php":">=5.3.0",
"silex/silex":"dev-master",
"twig/twig":">=1.8,<2.0-dev",
"mycompany/superlogger":"dev-master"
},
"repositories":[
{
"type":"git",
"url":"http://github.com/pqr/superlogger"
}
]
}
Чтобы Composer знал где искать пакет «mycompany/superlogger», мы добавили массив repositories со ссылкой на соотвествующий github репозиторий. Обратим внимание, что записи в массиве repositories напрямую никак не связаны с блоком require — между пакетами и репозиториями не указано соответствие. На сколько я понял, Composer ищет все требуемые пакеты во всех указанных репозиториях (в т.ч. на сайте packagist.org) и скачивает найденные совпадения по каким-то внутренним приоритетам. Более глубоко я в этом моменте ещё не разбирался, поправьте меня, если кто-то знает детали.
Подключаем произвольный git репозиторий
Теперь подключим нашу легаси-библиотеку superlib, которая лежит на github, но не является оформленным Composer-пакетом, т.к. она очень старая.
{
"require":{
"php":">=5.3.0",
"silex/silex":"dev-master",
"twig/twig":">=1.8,<2.0-dev",
"mycompany/superlogger":"dev-master",
"pqr/superlib":"1.2.3"
},
"repositories":[
{
"type":"git",
"url":"http://github.com/pqr/superlogger"
},
{
"type":"package",
"package":{
"name":"pqr/superlib",
"version":"1.2.3",
"source":{
"type":"git",
"url":"http://github.com/pqr/superlib",
"reference":"master"
},
"autoload":{
"classmap":["timer.php"],
"files":["lib_functions.php"]
}
}
}
]
}
В массив repositories добавился объект, который целиком описывает пакет pqr/superlib. По сути, это то описание, которое должен был бы сделать автор библиотеки и положить его внутри своего репозитория. Но по условиям задачи, superlib не является оформленным Composer-пакетом, поэтому нам пришлось создать его описание в рамках Super Hello World проекта. Аналогичным образом можно подключить любую другую библиотеку, в т.ч. простой zip файл.
