Если вы когда-нибудь устанавливали зависимости через Composer, то наверняка пользовались Packagist — главным репозиторием PHP-пакетов. Но задумывались ли вы, как опубликовать туда свой собственный код? Это не так сложно, как кажется. В этой статье я покажу, как создать пакет с нуля, настроить его и выложить на Packagist, чтобы другие разработчики могли использовать ваши наработки.
Что такое Packagist и зачем он нужен
Packagist — это центральный репозиторий, через который Composer находит и загружает пакеты. Представьте его как «магазин приложений» для PHP. Когда вы пишете composer require vendor/package, Composer обращается к Packagist, находит нужный пакет и скачивает его.
Если вы разработали полезную библиотеку или инструмент, публикация на Packagist позволит другим программистам легко использовать ваш код. Это не только делиться опытом, но и способ заявить о себе как о разработчике.
Подготовка: что нужно для создания пакета
Прежде чем начать, убедитесь, что у вас есть:
- Установленный PHP версии 7.4 или выше (лучше 8.0+).
- Composer — менеджер зависимостей для PHP.
- Аккаунт на GitHub (или другом Git-хостинге) и на Packagist.
Также желательно иметь базовые знания Git и Composer. Если вы уже работали с этими инструментами, всё будет просто.
Создаём структуру проекта
Начнём с создания папки для вашего пакета. Пусть это будет my-awesome-package. Внутри создайте файл composer.json — это главный файл, который описывает ваш пакет.
Вот пример минимального composer.json:
{
"name": "vendor/my-awesome-package",
"description": "A short description of what your package does",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "your.email@example.com"
}
],
"require": {
"php": ">=7.4"
},
"autoload": {
"psr-4": {
"Vendor\\MyPackage\\": "src/"
}
}
}
Разберём ключевые поля:
name— уникальное имя пакета в форматеvendor/package. Оно должно совпадать с вашим именем на Packagist.autoload— определяет, как Composer будет загружать классы. PSR-4 — современный стандарт, где namespace соответствует структуре папок.require— указывает зависимости. В нашем случае только PHP.
Создайте папку src и добавьте туда ваш первый класс. Например, src/Hello.php:
<?php
namespace Vendor\MyPackage;
class Hello
{
public function greet(string $name): string
{
return "Hello, $name!";
}
}
Обратите внимание: namespace должен совпадать с тем, что вы указали в autoload. В нашем случае это Vendor\MyPackage.
Тестируем пакет локально
Прежде чем публиковать, убедитесь, что пакет работает. В корневой папке выполните:
composer dump-autoload
Это сгенерирует автозагрузчик. Теперь создайте тестовый файл test.php:
<?php
require 'vendor/autoload.php';
use Vendor\MyPackage\Hello;
$hello = new Hello();
echo $hello->greet('World');
Запустите его командой php test.php. Если вы увидите Hello, World! — всё работает. Отлично!
Публикация на GitHub
Packagist работает с Git-репозиториями. Поэтому сначала загрузите свой проект на GitHub. Для этого инициализируйте репозиторий и отправьте код:
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/yourusername/my-awesome-package.git
git push -u origin master
Убедитесь, что у вас есть файл .gitignore, чтобы не загружать лишние файлы. Минимальный набор — исключить папку vendor и тестовые файлы.
README.md с описанием пакета, примерами использования и документацией. Это повысит доверие и поможет другим разработчикам быстрее разобраться.
Регистрация на Packagist
Теперь перейдите на packagist.org, зарегистрируйтесь и войдите. Нажмите кнопку «Submit» (Отправить) в верхнем меню. Введите URL вашего GitHub-репозитория и нажмите «Check» (Проверить). Packagist проверит, что репозиторий доступен и содержит корректный composer.json.
После успешной проверки нажмите «Submit Package». Готово! Ваш пакет теперь доступен на Packagist.
Но это ещё не всё. Чтобы поддерживать пакет в актуальном состоянии, вам нужно настроить автоматическое обновление. Для этого в настройках Packagist укажите вебхук (webhook) для вашего GitHub-репозитория. Тогда при каждом пуше изменений Packagist будет автоматически обновляться.
Практические советы и таблица сравнения
Вот несколько советов, которые помогут вам избежать типичных ошибок:
- Всегда указывайте версию пакета. Packagist автоматически берёт теги из Git. Используйте семантическое версионирование (например, 1.0.0).
- Пишите тесты. Это не обязательно, но сильно повышает качество и доверие.
- Документируйте код. Другие разработчики будут вам благодарны.
Для сравнения, вот таблица, показывающая, какие поля в composer.json являются обязательными, а какие — опциональными:
| Поле | Обязательное? | Описание |
|---|---|---|
| name | Да | Уникальное имя пакета (vendor/package) |
| description | Да | Краткое описание пакета |
| type | Нет | Тип пакета (library, project и т.д.) |
| license | Рекомендуется | Лицензия, под которой распространяется код |
| autoload | Да | Способ автозагрузки классов |
| require | Да | Список зависимостей |
Заключение
Итак, мы прошли весь путь — от создания структуры пакета до публикации на Packagist. Теперь вы можете делиться своими библиотеками с миром. Это не только полезно, но и приятно, когда другие разработчики используют ваш код.
Помните: главное — начать. Не бойтесь ошибок, со временем вы научитесь создавать качественные пакеты. Удачи!



