Узнайте, как распространять пакеты PHP с помощью Packagist

Вы разработали прекрасный пакет PHP, в который вложили всю душу и которым гордитесь. Теперь пришло время для распространения, и одна из ключевых частей – это обеспечение того, чтобы вы предоставили другим самый простой способ загрузки и использования вашего пакета, но как?

К счастью, для этого есть Packagist, де-факто бесплатный репозиторий для всех зависимостей пакетов PHP. Узнайте, как добавить ваш пакет PHP в список на Packagist, чтобы другие могли загружать и устанавливать его с помощью одной команды.

Правильно структурируйте свой пакет

Перед распространением ваш пакет должен быть правильно структурирован и должен использовать пространства имен. Определитесь с корневым пространством имен для вашего пакета. Это может быть что угодно, но обычно рекомендуется использовать Author PackageName .

Например, пространство имен JSmith BlogPoster будет информировать других, что разработчик пакета носит имя Jsmith, а это их пакет с именем BlogPoster .

Определив корневое пространство имен, создайте каталог / src / в своем проекте и переместите в него все файлы PHP. Каждый файл должен иметь правильное объявление вверху, поэтому все файлы PHP в каталоге / src / должны начинаться:

 
<?php
namespace JSmithBlogPoster;

Объявление пространства имен относится к структуре каталогов. Например, если у вас есть файл /src/Images/Uploader.php, вверху файла у вас будет:

 
<?php
namespace JSmithBlogPosterImages;
class Uploader
{
}

Наконец, убедитесь, что объявление класса всех файлов PHP совпадает с именем файла, как показано в приведенном выше примере. Файл Uploader.php имеет имя класса Uploader .

Зарегистрируйте учетную запись Packagist

Если у вас его еще нет, создайте учетную запись Packagist , это быстро и бесплатно. Хотя это и не обязательно, стандартной практикой является регистрация с тем же именем пользователя, что и в корневом пространстве имен, которое вы выбрали в предыдущем разделе. Если это имя пользователя недоступно, выберите что-нибудь подобное.

Вам пока не нужно ничего делать с учетной записью Packagist, но было бы полезно, чтобы она была готова.

Создать файл composer.json

Откройте текстовый редактор и в корневом каталоге вашего проекта создайте файл composer.json со следующим содержимым, используемым в качестве примера:

 
{
"name": "jsmith/blogposter",
"description": "An excellent blog posting package...",
"type": "package",
"homepage": "https://yourdomain.com",
"license": "MIT",
"require": {
"php": ">=8.0.0"
},
"autoload": {
"psr-4": {
"JSmithBlogPoster": "src/"
}
}
}

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

Во- первых это имя элемент в верхней части. Это должны быть две строки, разделенные косой чертой, первая – ваше имя пользователя Packagist, а вторая – желаемое имя пакета. В приведенном выше примере имя пользователя Packagist – jsmith , а имя пакета – blogposter .

Во-вторых, внизу в разделе автозагрузки вы заметите строку:

 "JSmithBlogPoster": "src/"

Измените эту строку так, чтобы корневое пространство имен, которое вы ранее выбрали, указывало на каталог / src /. Когда ваш пакет установлен кем-то другим, Composer автоматически сопоставит ваше корневое пространство имен с подкаталогом, в котором был установлен ваш пакет.

Загрузите свой пакет в Github

Вам необходимо загрузить свой пакет PHP в репозиторий Github, поскольку это основной метод интеграции, который использует Packagist. Если вы еще не знакомы с созданием и публикацией в репозитории Github, ознакомьтесь с разделом « Как создать свой первый репозиторий на GitHub», чтобы получить отличное пошаговое руководство.

Убедитесь, что вы загрузили весь пакет PHP, включая все файлы в / src / и файл composer.json. Если вы хотите просто загрузить весь каталог проекта в GitHub, откройте терминал внутри каталога проекта и запустите:

 git add ./*
git commit -m "Initial commit"
git push -u origin master

Вы также должны добавить тег в репозиторий GitHub, поскольку теги позволяют Packagist отслеживать выпуски и номера версий ваших пакетов. Чтобы пометить текущий репозиторий как v0.1, выполните команды:

 git tag 0.1
git push --tags

Добавить листинг PHP в Packagist

Теперь все готово, так что с улыбкой вы можете отправить свой PHP-пакет для мгновенного включения в список на Packagist. Посетите страницу отправки пакета и введите URL-адрес своего репозитория GitHub, который будет примерно таким:

 https://github.com/jsmith/blogposter.git

Нажмите кнопку « Проверить отправку», и Packagist загрузит файл composer.json из вашего репозитория, а также все доступные теги / выпуски и другую информацию.

Следующая страница подтвердит, что вы хотите опубликовать пакет; после подтверждения вы сможете просматривать свой новый список Packagist по URL-адресу, например:

 https://packagist.org/packages/jsmith/blogposter

Установите свой пакет с помощью Composer

Попробуйте и установите свой пакет PHP с помощью Composer. Если у вас еще не установлен Composer, вы можете установить его с помощью следующей команды:

 sudo curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Создайте новый каталог и выполните в нем команду:

 composer require jsmith/blogposter

Composer сотворит чудеса, и вы заметите, что появится новый подкаталог / vendor /, в который, если вы заглянете внутрь, вы увидите свой пакет PHP!

Протестируйте его и загрузите свой PHP-пакет. Используя приведенный выше пример, если бы в пакете был файл /src/Blogger.php, сценарий быстрой проверки для его загрузки был бы следующим:

 
<?php
use JSmithBlogPosterBlogger;
// Load composer dependences
require("./vendor/autoload.php");
// Get blogger
$client = new Blogger();
echo "Got a " . $client::class . "
";

Идите вперед и поделитесь с миром

Теперь вы узнали, насколько легко правильно структурировать свой пакет PHP и разместить его в Packagist, что позволяет любому человеку в мире мгновенно загрузить и включить ваш пакет в свой проект с помощью одной единственной команды.

Поздравляем, теперь вы открыли свой пакет PHP до основного канала распространения в экосистеме PHP. Идите вперед и поделитесь своим творчеством и тяжелой работой со всем миром.