← Повернутись до блогу

Ваш перший composer пакет

September 2020 4 хвилини на читання 205 переглядів

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 і заповнити наступним вмістом.

json

{
    "name": "ctrlv/composer-package",
    "description": "Демонстраційний пакет в рамках статті про створення пакету composer",
    "authors": [
        {
            "name": "ctrlv.me",
            "email": "[email protected]"
        }
    ],
    "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

<?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

<?php

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

use ctrlv\HelloWorld\HelloWorld;

HelloWorld::sayHi();

Залишається тільки перевірити, щоб все працювало так, як ми це задумали, для цього виконаємо консольну команду php examples/example.php, результатом роботи якої буде вивід привітання на екран.

Крок 4: Публікуємо на github

Перш ніж опублікувати проект на github, давайте виконаємо конфігурацію проекту, а саме:

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

Файл .gitignore

/.idea
/vendor
/composer.lock

Файл README.md

# Hello World

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

Приклади коду в файлі examples/example.php

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

  1. Заходимо на 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.

2018–2025 (c) Списуй але не один в один