Ваш перший 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:
- Заходимо на github, створюємо новий репозиторій
- Ініціалізуємо 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.