Библиотеки

  1. Каждый проект - это пакет
  2. Версии библиотеки
    1. Версификация VCS
  3. Файл блокировки
  4. Публикация в VCS
  5. Издание для packagist

В этой главе рассказывается, как сделать вашу библиотеку устанавливаемой через Composer.

Каждый проект - это пакет #

Как только у вас есть composer.json в каталоге, этот каталог является пакетом. Когда вы добавляете требование к проекту, вы создаете пакет, который зависит от других пакетов. Единственное различие между вашим проектом и библиотекой заключается в том, что ваш проект представляет собой пакет без имени.

Чтобы сделать этот пакет устанавливаемым, вы должны дать ему имя. Вы делаете это, добавляя свойство name в composer.json:

{
 "name": "acme/hello-world",
 "require": {
 "monolog/monolog": "1.0.*"
 }
}

В этом случае имя проекта - acme/hello-world, где acme - имя поставщика. Предоставление имени поставщика является обязательным.

Примечание. Если вы не знаете, что использовать в качестве имени поставщика, ваше имя пользователя GitHub обычно является хорошей ставкой. Несмотря на то, что имена пакетов не чувствительны к регистру, соглашение используется в нижнем регистре и тире для разделения слов.

Версии библиотеки #

В подавляющем большинстве случаев вы будете поддерживать свою библиотеку с помощью какой-то системы управления версиями, такой как git, svn, hg или fossil. В этих случаях Composer выводит версии из вашего VCS, и вы не должны указывать версию в вашем файле composer.json. (См. Статью «Версии», чтобы узнать, как Composer использует ветви и теги VCS для разрешения ограничений версии.)

Если вы держите пакеты вручную (то есть без VCS), вам нужно указать версию явно, добавив значение version в ваш файл composer.json:

{
 "version": "1.0.0"
}
Примечание. Когда вы добавляете жестко заданную версию в VCS, версия конфликтует с именами тегов. Композитор не сможет определить номер версии.

Версификация VCS #

Composer использует функции ветвления и тега VCS для разрешения ограничений версии, указанных в поле require, для определенных наборов файлов. При определении допустимых доступных версий Composer просматривает все ваши теги и ветви и преобразует их имена во внутренний список параметров, который он сопоставляет с ограниченным числом версий.

Подробнее о том, как Composer обрабатывает теги и ветви и как он разрешает ограничения версии пакета, читайте статью о версиях.

Заблокировать файл #

Для вашей библиотеки вы можете зафиксировать файл composer.lock, если хотите. Это может помочь вашей команде всегда проверять на соответствие тем же версиям зависимостей. Однако этот файл блокировки не будет влиять на другие проекты, зависящие от него. Это влияет только на основной проект.

Если вы не хотите фиксировать файл блокировки и используете git, добавьте его в .gitignore.

Публикация на VCS #

Когда у вас есть репозиторий VCS (система управления версиями, например git), содержащий файл composer.json, ваша библиотека уже может быть установлена ​​композитором. В этом примере мы опубликуем библиотеку 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 начнет сканировать его. Как только это будет сделано, ваш пакет будет доступен для всех!

← Основное использование Интерфейс командной строки →