- Каждый проект в Composer — это пакет
- Версионирование библиотек в Composer
- Блокировка файла в Composer
- Публикация в VCS
- Публикация в Packagist
Каждый проект в Composer — это пакет.
В этой главе описывается, как сделать свою библиотеку устанавливаемой через Composer.
Как только в какой-либо директории появляется composer.json, эта директория становится пакетом. Когда вы добавляете require
в проект, вы создаете пакет, который зависит от других пакетов. Единственное различие между вашим проектом и библиотекой заключается в том, что ваш проект - это пакет без имени.
Чтобы сделать этот пакет устанавливаемым, необходимо задать ему имя. Для этого нужно добавить свойство name
в composer.json
:
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
В данном случае имя проекта acme/hello-world
, где acme
- имя разработчика. Указание имени разработчика является обязательным.
Примечание: Если вы не знаете, что использовать в качестве имени разработчика, ваше имя пользователя на GitHub обычно является хорошим вариантом. Имена пакетов должны быть в нижнем регистре, а для разделения слов принято использовать тире.
Версионирование библиотек в Composer.
В подавляющем большинстве случаев вы будете поддерживать свою библиотеку с помощью какой-либо системы контроля версий, например, git, svn, hg или fossil. В этих случаях Composer получает версии из вашей VCS, и поэтому вам не следует указывать версию в файле composer.json
. (См. статью Версии, чтобы узнать о том, как Composer использует ветви и теги VCS для определения версий).
Если вы поддерживаете пакеты вручную (т.е. без VCS), необходимо явно указать версию, добавив значение version
в файл composer.json
:
{
"version": "1.0.0"
}
Примечание: Когда вы добавляете жестко заданную версию в VCS, версия будет конфликтовать с именами тегов. Composer не сможет определить номер версии.
Версионирование VCS.
Composer использует возможности ветвей и тегов вашей VCS для определения версий, которые вы указываете в поле require
, для определенных наборов файлов. При определении доступных версий Composer просматривает все ваши теги и ветви и преобразует их имена во внутренний список параметров, которые затем сопоставляет с указанным вами ограничением версии.
Подробнее о том, как Composer обрабатывает теги и ветви и как он применяет ограничения версий пакетов, читайте в статье о версиях.
Блокировка файла в Composer.
Для своей библиотеки можно зафиксировать файл composer.lock
, если это необходимо. Это может помочь вашей команде всегда тестировать одни и те же версии зависимостей. Однако этот файл блокировки не будет иметь никакого влияния на другие проекты, которые зависят от него. Он влияет только на основной проект.
Если не требуется коммитить файл блокировки, и вы используете git, добавьте его в .gitignore
.
Публикация в VCS.
Если у вас есть VCS-репозиторий (система контроля версий, например, git), содержащий файл composer.json
, ваша библиотека уже может быть установлена с помощью composer. В примере ниже библиотека acme/hello-world
будет опубликована на GitHub по адресу github.com/username/hello-world
.
Теперь, чтобы проверить установку пакета acme/hello-world
, мы создадим новый проект локально. Назовём его acme/blog
. Этот блог будет зависеть от acme/hello-world
, который, в свою очередь, зависит от monolog/monolog
. Мы можем сделать это, создав где-нибудь новый каталог блога, содержащий composer.json
:
{
"name": "acme/blog",
"require": {
"acme/hello-world": "dev-master"
}
}
В данном случае имя не нужно, так как в этом случае мы не хотим публиковать блог как библиотеку. Оно добавлено здесь, чтобы уточнить, какой composer.json
описывается.
Теперь необходимо указать приложению блога, где найти зависимость hello-world
. Для этого добавим спецификацию репозитория пакетов в composer.json
блога:
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
Более подробно о том, как работают репозитории пакетов и какие другие типы доступны, смотрите раздел Репозитории.
Вот и все. Теперь можно установить зависимости, выполнив команду install
в Composer!
Итого: Любой репозиторий git/svn/hg/fossil, содержащий composer.json
, можно добавить в ваш проект, указав репозиторий пакетов и объявив зависимость в поле require
.
Публикация в Packagist.
Итак, теперь вы можете публиковать пакеты. Но каждый раз указывать репозиторий VCS очень обременительно. Не стоит заставлять всех пользователей делать это.
Еще одна вещь, которую вы могли заметить, это то, что мы не указали хранилище пакетов для monolog/monolog
. Как это было сделано? Ответ — Packagist.
Packagist — это основной репозиторий пакетов для Composer, и он включен по умолчанию. Все, что публикуется на Packagist, автоматически доступно через Composer. Поскольку Monolog находится на Packagist, то можно использовать его без необходимости указывать дополнительные репозитории.
Если бы мы хотели поделиться hello-world
со всем миром, мы бы тоже опубликовали его на Packagist.
Вы заходите на Packagist и нажимаете кнопку "Отправить". Вам будет предложено зарегистрироваться, если вы этого еще не сделали, а затем вы сможете отправить URL-адрес вашего VCS-репозитория, после чего Packagist начнет его сканирование. Как только это будет сделано, ваш пакет станет доступен для всех!
Перевод с английского официальной документации Composer:
https://getcomposer.org/doc/02-libraries.md
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)