Ваш первый composer пакет

Composer — инструмент для управления зависимостями, который позволит управлять библиотеками, что подключены к Вашему проекту. Composer используется во многих фреймворках, например, мой любимый единственный, который я знаю — Laravel. Применение Composer проектах уже является стандартом веб-разработки, по этому, если вы по какой-либо причине не пользуетесь им — скорее подключайтесь!

В этой статье вы узнаете, как создать свой собственный Composer пакет, опубликовать его на GitHub, а так-же зарегистрировать в Packagist.

Подключение Composer пакета к своему проекту

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

Я вспомнил два варианта подключения:

  • Прописать название пакета в секцию require (require-dev) и выполнить консольную команду composer update
  • Выполнить консольную команду composer require название/пакета

Оба способа требуют название пакета для его подключения. Не секрет, все пакеты размещены на сервесе packagist.org. Цель нашей статьи как раз в том, чтобы разместить свою «библиотеку» на этом сервисе и сделать ее доступной для подключения из composer.

Шаг 0: Определяемся со структурой своего пакета

Минимально, для создания нового пакета нам необходимо создать определенную структуру нашего пакета. Сама структура не имеет значения, вы можете разместить свои файлы в любых папках с произвольными именами, в рамках этой статьи будет предложена такая иерархия:

composer-package/
|    examples/
|    |    example.php
|    src/
|    |    HelloComposer.php
|    composer.json
|    README.md

composer-package/ — корневая папка для пакета;
composer-package/examples/ — папка, в которой будут храниться примеры использования нашей библиотеки;
composer-package/examples/example.php — файл, который демонстрирует функциональность;
composer-package/src/ — папка, где будет храниться наша библиотека;
composer-package/src/HelloComposer.php — тот самый код, который мы хотим распространять через композер;
composer.json — текстовый файл, в котором описаны все дополнительные библиотеки, которые мы можем использовать в нашем пакете. Так-же в этом файле хранится информация о нашем пакете;
README.md — Здесь хранится вербальное описание нашей библиотеки, которое выводится на GITHUB. Файл не обязателен, если Вы думаете только о себе и не рассчитываете на то, что Ваш код может кому-то пригодится.

Шаг 1: Создайте файл composer.json

Как упоминалось выше, composer.json — текстовый файл, в котором описаны все сторонние библиотеки, от которых зависит наш проект (пакет). Создать файл можно двумя способами:

Создание при помощи консольной команды

Файл composer.json создается автоматически при вводе консольной команды composer init в папке проекта. После ввода команды будет предложено ввести информацию об основных характеристиках пакета, таких как название и описание.

Создание composer.json вручную

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

{
    "name": "ctrlv/composer-package",
    "description": "Демонстрационный пакет в рамках статьи о создании пакета composer",
    "authors": [
        {
            "name": "ctrlv.me",
            "email": "dev@ctrlv.me"
        }
    ],
    "require": {
        "php": ">=7.2.0"
    },
    "require-dev": {

    },
    "minimum-stability": "dev",
    "autoload": {
        "psr-4": {
            "ctrlv\\HelloWorld\\": "src/"
        }
    }
}

Обратите внимание на секцию autoload, это один из важнейших моментов здесь, вокруг которого и строится магия. В ней находится указание того, что все файлы с пространством имен ctrlv\HelloWorld внутри папки src должны быть загружены автоматически в проект.

Шаг 2: Написание библиотеки

Теперь, когда у нас есть подключенный composer к нашему проекту, можно приступать к написании самой библиотеки. Для этого в файле HelloWorld.php, который находится в папке src напишем вот такой простой класс:

<?php

namespace ctrlv\HelloWorld;

class HelloWorld {

    public static function sayHi() {
        echo "Hello World" . PHP_EOL;
    }

}

Суть проста. Один статический метод, который просто выводит информацию на экран.

Шаг 3: Пишем пример использования пакета

Наш пакет готов. Писать пример не обязательно, но крайне желательно 🙂

Для начала, давайте выполним консольную команду composer install, которая создаст (обновит) папку vendor в нашем текущем проекте. Это нужно сделать для того, чтобы мы могли подключить автозагрузку композера и пользоваться пространством имен внутри файла examples/example.php.

Следующим шагом будет написание самого файла с примером examples/example.php, который выглядит так, как показано ниже:

<?php

require __DIR__ . '/../vendor/autoload.php';

use ctrlv\HelloWorld\HelloWorld;

HelloWorld::sayHi();

Остается только проверить, чтобы все работало так, как мы это и задумали, для этого выполним консольную команду php examples/example.php, результатом работы которой будет вывод приветствия на экран.

php examples/example.php

Шаг 4: Публикуем на github

Прежде чем опубликовать проект на github, давайте выполним конфигурацию проекта, а именно:

  • Создадим файл .gitignore, в который пропишем какие файлы не нужно отслеживать, чтобы лишнее не попало в репозиторий
  • Напишем описание проекта в файле README.md

Файл .gitigonore

/.idea
/vendor
/composer.lock

Файл README.md

# Hello World

Проект создан в рамках статьи о [создании composer пакетов](https://ctrlv.me/you-first-composer-package/)

Примеры кода в файле examples/example.php

Теперь, когда все готово, можем загрузить наш код на github:

1) Заходим на github, создаем новый репозиторий

Создание репозитория на github

2) Инициализируем git внутри своего проекта, добавляем файлы, коммитим и пушим на github при помощи команд

git init
git add *
git commit -m "Initial Commit"
git remote add origin https://github.com/ctrlv-dev/HelloWorld.git
git push -u origin master

Заметьте, команды на добавление удаленного репозитория у вас будут отличаться, но это и так понятно. В результате наша библиотека будет опубликована на github, и все что нам осталось сделать — добавить ее в сервис packagist.

Anatolii Koziura

Антураж-куражмонтаж в мире web разработки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *