Содержание
Composer — это инструмент для управления зависимостями в PHP, он позволяет вам объявить библиотеки, от которых зависит ваш проект, и он будет управлять (устанавливать или обновлять) их для вас. Многие проекты и фреймворки используют composer для управления зависимостями. Но эти пакеты должны быть зарегистрированы где-нибудь, и это то, что делает Packagist. Packagist — это хранилище пакетов Composer по умолчанию. Это позволяет вам находить пакеты и позволяет Composer знать, откуда взять код. Вы можете использовать пакеты, разработанные сообществом, а также можете добавлять свои собственные пакеты.
В этой статье вы узнаете, как создать пакет PHP Packagist в Github для использования в composer и как зарегистрировать его на Packagist.org.
1. Создать базовую структуру пакета
Чтобы создать пакет в его наименьшем выражении, нам нужно создать базовую структуру (2 папки и 3 файла).
- Начните с создания папки с именем вашего пакета, в этом случае папка контейнера будет
hello-composer
, - Создайте новую папку внутри
hello-composer
с именемsrc
эта папка будет содержать исходный код вашего пакета. - Создайте первый класс вашего пакета (внутри
hello-composer/src
), в этом случае наш класс будетHello
с именем файлаHello.php
и он будет содержать следующий код:
Пространство имен может быть изменено по вашему желанию, в этом случае мы добавим ourcodeworld
Префикс, так как вы можете создавать множество пакетов, но с префиксом они всегда будут связаны с вами (кроме того, он будет создан в одной папке в каталоге vendor).
2. Создайте файл composer.json
composer.json
файл должен находиться в верхней части вашего пакета (hello-composer/composer.json
), и это способ, которым вы описываете свой пакет как для Packagist, так и для композитора.
Прежде всего, вы должны выбрать название пакета. Это очень важный шаг, так как он не может измениться и должен быть достаточно уникальным, чтобы избежать конфликтов в будущем, это имя должно быть в "name"
собственность composer.json
файл.
Есть 2 способа создания composer.json
файл для вашей посылки:
А. С помощником композитора
Создать composer.json
с динамическим помощником, который будет запрашивать каждое свойство в консоли, чтобы запустить его, перейдите в папку пакета с консолью:
cd c:/folder-where/your-package-is-located/hello-composer
и затем выполните:
composer init
Следуйте интерактивной подсказке и укажите значение для каждого поля. Если вам нужно больше полей в сгенерированном composer.json, см. документацию для большего количества свойств или используйте следующее composer.json
,
Б. Вручную
Вы можете создать свой собственный composer.json
вручную, следуя следующему примеру (измените значения в соответствии с вашими):
{
"name": "ourcodeworld/hello-composer",
"description": "My first packagist package",
"type": "package",
"require": {
"php": ">=5.3.0"
},
"license": "mit",
"authors": [
{
"name": "Your Name",
"email": "your@email.com",
"homepage": "http://yourhomepage-if-you-have.com"
}
],
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"ourcodeworld\\HelloComposer\\": "src/"
}
}
}
Самый важный момент в composer.json
это «автозагрузка», внутри «psr-4» вы укажете, что все файлы с пространством имен ourcodeworld\HelloComposer
внутри src/
папка вашего пакета должна быть автоматически загружена. Префиксы пространства имен должны заканчиваться на \\
чтобы избежать конфликтов между похожими префиксами. Например Foo
будет соответствовать классам в FooBar
namespace, так что обратные косые черты решают проблему: Foo\\
а также FooBar\\
различны.
Затем, когда ваш пакет был опубликован и установлен (еще нет), вы можете создать экземпляр ранее созданного класса Hello
с:
say("Hello World");
Не стесняйтесь изменять пространства имен по своему желанию в composer.json
и твои занятия. После того, как все файлы созданы, структура вашего проекта должна выглядеть так (вы можете посетить тестовый репозиторий в Github, чтобы увидеть структуру там):
3. Разместите свой пакет
Чтобы опубликовать свой пакет в Packagist, вам нужно будет разместить его в репозитории с контролем версий, например, GIT, Subversion или Mercurial. Как упоминалось в этой статье, мы собираемся использовать Github для размещения нашего тестового пакета с Git.
Создайте репозиторий Github, если он еще не создан с названием вашей посылки (в этом случае hello-composer
) и лицензию, если хотите:
После создания клонируйте репозиторий на рабочий стол и сохраните содержимое нашего пакета внутри. Мы предполагаем, что у вас есть знания в Git, и вы знаете, как зафиксировать все файлы репозитория. Зафиксируйте все файлы в своем хранилище, после подтверждения убедитесь, что все файлы были успешно загружены:
Теперь хранилище должно находиться в https://github.com/ourcodeworld/hello-composer и URL-адрес мерзавца https://github.com/ourcodeworld/hello-composer.git.
4. Зарегистрировать пакет в упаковке
Перейдите к Packagist и создайте новый аккаунт в случае, если у вас его нет. Если у вас есть учетная запись, войдите в систему и перейдите к Отправить и приступить к созданию пакета.
Дайте URL репозитория, в нашем случае нашего репозитория https://github.com/ourcodeworld/hello-composer и затем нажмите «Проверить», Packagist проверит, доступно ли имя пакета, если оно есть, нажмите «Отправить».
Название пакета будет получено из composer.json
файл в вашем хранилище:
Как только ваша посылка будет принята, вы должны увидеть, что ваша посылка наконец опубликована:
Обратите внимание, что предупреждение «Этот пакет не обновляется автоматически» будет удалено, если вы выполните Шаг № 6.
5. Требуйте свой пакет и протестируйте его
Ваш пакет опубликован, и вы можете потребовать его с композитором! Команда для запроса вашего пакета с composer composer require /
что в этом случае будет:
composer require ourcodeworld/hello-composer
Обратите внимание, что если "minimum-stability"
собственность в вашем package.json
был установлен на "dev"
то проект, в котором вам требуется пакет, должен иметь такой же "minimum-stability"
свойство, в противном случае вы получите следующее исключение в консоли:
Не удалось найти посылку /
в любой версии для вашей минимальной стабильности (стабильной). Проверьте правильность написания пакета или минимальную стабильность
Если вы выполните предыдущую команду, чтобы добавить пакет в ваш проект, должен быть показан следующий вывод:
Для этого примера, чтобы проверить, работает ли наш созданный пакет, мы собираемся выполнить следующий скрипт php (так как это тест, мы загружаем autoload.php
из композитора, если вы используете фреймворк, такой как Symfony, вам, вероятно, не нужно это делать):
say("Hello World");
Используя команду:
php index.php
И окончательный вывод должен быть:
Поздравляем, вы только что успешно создали и опубликовали свой первый пакет-пакет!
6. Установите пакет автообновления при каждом нажатии с помощью Webhooks
Обычно, чтобы обновить пакет packagist, вам нужно зафиксировать свои изменения, а затем получить доступ к вашему пакету внутри Packagist.org и нажать «Обновить»:
Но это может стать довольно раздражающим, а также запутанным и дезорганизованным, это именно то, что мы хотим избежать с композитором. Чтобы упростить задачу, вы можете использовать Webhooks хранилища в Github. Концепция WebHook проста для понимания, WebHook - это просто обратный вызов HTTP, HTTP POST, который происходит, когда что-то происходит, и отправляет простое уведомление о событии через HTTP POST, в этом случае этот запрос POST будет автоматически выполняться Github. каждый раз, когда вы вносите некоторые изменения в свой репозиторий.
Чтобы включить эту функцию:
- Перейдите в свой репозиторий в Github и нажмите «Настройки».
- В этом документе выберите Интеграции Вариант услуг из левого меню.
- Нажмите на Добавить сервис и искать Packagist а затем нажмите на него.
Теперь вы, вероятно, будете перенаправлены для подтверждения вашего пароля, после чего появится следующее окно:
В этом окне укажите в форме свое имя пользователя Packagist.org и токен Packagist (этот токен является уникальным, и вы можете найти его в ваш профиль Packagist), установите флажок Active и нажмите Add service. Теперь ваш пакет будет автоматически обновляться в Packagist каждый раз, когда вы фиксируете изменения и вносите в них изменения.