Репозиторий для Composer
Пакеты нужно хранить в репозитории, в одном репозитории может храниться сразу несколько пакетов с разными версиями, различаются тегами.
Обязательным файлом для любого пакета является composer.json
. Это файл в котором хранится вся информация про данный пакет:
- Название
- Описание
- Список зависимостей
- Тип лицензии
Пример файла composer.json
простого пакета:
composer.json{
"name": "dataart/package",
"type": "library",
"description": "Composer package by DataArt",
"license": "MIT",
"require": {
"php": ">=5.4.0",
"illuminate/support": "~4.2"
},
"autoload": {
"psr-4": {
"Dataart\\Package\\": "src/"
}
}
}
name
имя пакета в форматеvendor/name
type
тип пакета, данный пакет будет библиотекаlibrary
библиотека, файлы скопируются вvendor
project
проект, например оболочки приложений, такие как стандартная версияSymfony
, системы управления содержимым, такие как установщикSilverStripe
, полноценные приложения, распространяемые в виде пакетов. Это применяется в интегрированных средах разработки, где предоставляются листинги проектов для инициализации при создании новой рабочей областиmetapackage
пустой пакет с требованиями, которым запускается их установка, но файлов в нем нет и в файловую систему ничего не записывается. Поэтому для его установки ключdist
илиsource
не требуетсяcomposer-plugin
в таком пакете может быть установщик других пакетов пользовательского типаsymfony-bundle
применяется в бандлах фреймворковSymfony
для автоматического с помощьюFlex
включения бандла при его установке
description
описание пакетаlicense
тип лицензииrequire
список зависимостей для публикации на проде данного пакета. Для него требуется версия PHP не менее 8.8.0 и пакетilluminate/support
require-dev
список зависимостей для среды разработки данного пакетаautoload
настройки автозагрузки. В данном случае указано, что неймспейсDataart\Package
начинается в папкеsrc
. У всех файлов, которые лежат в папкеsrc
, должен быть неймспейсDataart\Package
. Если, например, хотите создать классUser
и сохранить файл класса в папкеModels
, неймспейс классаUser
должен бытьDataart\Package\Models
В папке src
хранятся все нужные для работы пакета файлы. Рекомендуется рядом с папкой src
сделать папку tests
и покрыть библиотеку тестами. Далее вся папка, в которой лежит composer.json
, должна быть закоммичена в любом Гите.
Обязательно в проект нужно добавить файл README.md
с описанием пакета и особенностей его использования.
Автоматическое создание файла composer.json
Чтобы создать пустой проект в текущей папке, достаточно выполнить команду:
composer init
Утилита задаст несколько вопросов:
Package name
имя нового пакета в формате: автор/имяDescription
описаниеAuthor
автор пакетаMinimum Stability
стабильность пакета, можно выбрать dev или stablePackage Type
тип проекта, например: library, project, metapackage, composer-pluginLicense
лицензияDepencies
здесь вы можете интерактивно найти пакеты, от которых будет зависеть ваш проект
На последнем шаге утилита предложит вам проверить, всё ли верно указано в конфигурационном файле:
После подтверждения, будет создан файл composer.json
, вы сможете установить нужные пакеты и добавлять свои исходные файлы.
Командой composer init
не поддерживаются следующие параметры конфигурации:
Они добавляются в файл composer.json
вручную. Например, добавим в пакет пространство имен PSR-4 autoload-dev
:
composer.json{
"name": "dataart/package",
"type": "library",
"description": "Composer package by DataArt",
"license": "MIT",
"require": {
"php": ">=5.4.0",
"illuminate/support": "~4.2"
},
"autoload": {
"psr-4": {
"Dataart\\Package\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Dataart\\Package\\Tests\\": "tests/"
}
},
}
Загрузка пакета на Packagist
Пакет публикуется в два этапа:
- Файлы нужно разместить в публичном репозитории любого Гита
- Зарегистрировать проект в
Packagist
Регистрируемся и входим в хранилише Packagist
и отправляем пакет:
Нажимаем кнопку check для проверки уникальности названия пакета.
В случае успеха появится кнопка отправки, отправленный пакет несколько минут обрабатывается, затем публикуется и становится доступным к использованию в любом проекте на PHP.
Версии пакетов
Для создания вирсии пакета, нужно сначала внутри Гита где находятся файлы проекта сделать новый тег:
Нажать кнопку Update
в личном кабинете репозитория Packagist
на странице проекта:
Packagist
автоматически подтянет новый тег: