Если вы когда-нибудь устанавливали зависимости через Composer, то наверняка пользовались Packagist — главным репозиторием PHP-пакетов. Но задумывались ли вы, как опубликовать туда свой собственный код? Это не так сложно, как кажется. В этой статье я покажу, как создать пакет с нуля, настроить его и выложить на Packagist, чтобы другие разработчики могли использовать ваши наработки.

Digital-студия WNDER

Что такое 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. Теперь вы можете делиться своими библиотеками с миром. Это не только полезно, но и приятно, когда другие разработчики используют ваш код.

Помните: главное — начать. Не бойтесь ошибок, со временем вы научитесь создавать качественные пакеты. Удачи!

Студия WNDER