composer
Composer
Чтобы начать использовать Composer в своём проекте, вам понадобится только composer.json файл. Этот файл описывает зависимости вашего проекта и может содержать другие метаданные. Обычно он находится в самом верхнем каталоге вашего проекта/репозитория
Первое, что вы указываете в composer.json, — это ключ require . Вы сообщаете Composer, от каких пакетов зависит ваш проект.
{
"require": {
"monolog/monolog": "2.0.*"
}
}
Composer использует эту информацию для поиска нужного набора файлов в пакете «репозитории», который вы регистрируете с помощью ключа repositories или в Packagist.org, репозитории пакетов по умолчанию.
Название пакета состоит из имени поставщика и названия проекта
Composer сначала берёт имя запрошенного вами пакета и ищет его в любых репозиториях, которые вы зарегистрировали с помощью ключа repositories . Если вы не зарегистрировали дополнительные репозитории или не нашли пакет с таким именем в указанных вами репозиториях, Composer обращается к Packagist.org (подробнее ниже).
Установка зависимостей
Чтобы сначала установить указанные зависимости для вашего проекта, выполните команду update
Это заставит Composer сделать две вещи:
Он разрешает все зависимости, указанные в вашем composer.json файле, и записывает все пакеты и их точные версии в composer.lock файл, привязывая проект к этим конкретным версиям. Вам следует зафиксировать composer.lock файл в репозитории проекта, чтобы все участники проекта работали с одними и теми же версиями зависимостей (подробнее ниже). Это основная функция команды update .
Затем неявно выполняется команда install. Это позволит загрузить файлы зависимостей в каталог vendor в вашем проекте. (Каталог vendor — это стандартное место для хранения всего стороннего кода в проекте). В нашем примере выше исходные файлы Monolog будут находиться в vendor/monolog/monolog/. Поскольку Monolog зависит от psr/log, файлы этого пакета также можно найти в vendor/.
php composer.phar update
осле получения новых изменений из репозитория VCS рекомендуется запустить Composer install, чтобы убедиться, что каталог vendor синхронизирован с вашим composer.lock-файлом.
php composer.phar install
Если вы хотите установить, обновить или удалить только одну зависимость, вы можете указать её в качестве аргумента:
php83 composer update monolog/monolog
Packagist
Packagist.org — это основной репозиторий Composer. Репозиторий Composer — это, по сути, источник пакетов: место, откуда можно получить пакеты. Packagist стремится стать центральным репозиторием, которым пользуются все. Это значит, что вы можете автоматически require любой доступный там пакет, не указывая дополнительно, где Composer должен искать пакет.
https://packagist.org/
Автозагрузка
Для библиотек, в которых указана информация об автозагрузке, Composer генерирует файл vendor/autoload.php . Вы можете подключить этот файл и начать использовать классы, предоставляемые этими библиотеками, без каких-либо дополнительных действий:
Вы даже можете добавить свой собственный код в автозагрузчик, добавив поле autoload в composer.json
Composer зарегистрирует автозагрузчик PSR-4 для пространства имён Acme.
Вы определяете сопоставление пространств имён с каталогами. Каталог src будет находиться в корневом каталоге вашего проекта на том же уровне, что и каталог vendor . Примером имени файла может быть src/Foo.php , содержащее класс Acme\Foo
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
После добавления поля autoload необходимо повторно выполнить эту команду:
php composer.phar dump-autoload
Эта команда создаст файл vendor/autoload.php заново
Автозагрузка классов по стандарту PS4
Пространства имен позволяют масштабировать кодовую базу за счёт разделения классов по пространствам имён и сохранения логических границ между различными модулями.
PSR-4 — это стандарт автозагрузки PHP, позволяющий разработчикам структурировано и предсказуемо сопоставлять пути к файлам с полными именами классов. Этот стандарт устраняет необходимость вручную подключать файлы с помощью операторов require или include
Например, Если есть класс App\Controllers\HomeController, PSR-4 ожидает, что этот класс будет находиться в файле, расположенном по адресу src/Controllers/HomeController.php
Поскольку PSR-4 является общепринятым стандартом, он обеспечивает совместимость со сторонними библиотеками и фреймворками
Полное имя класса должно соответствовать структуре каталога и имени файла.
Полное имя класса имеет следующий вид: \\<NamespaceName>(\\<SubNamespaceNames>)*\\<ClassName>
Полное имя класса ДОЛЖНО иметь имя пространства имен верхнего уровня, также известное как "пространство имен поставщика".
Полное имя класса МОЖЕТ иметь одно или несколько вложенных пространств имен имен.
Полное имя класса ДОЛЖНО заканчиваться именем класса.
При загрузке файла, соответствующего полному имени класса...
Непрерывная последовательность из одного или нескольких начальных имен пространства имен и подпространств имен, не включая начальный разделитель пространства имен, в полном имени класса (так называемый «префикс пространства имен») соответствует как минимум одному «базовому каталогу».
Соседние имена подпространств имен после префикса «пространства имен» соответствуют подкаталогу в «базовом каталоге», в котором разделители пространств имен соответствуют разделителям каталогов. Имя подкаталога ДОЛЖНО совпадать с регистром имен подпространств имен.
Имя завершающего класса соответствует имени файла, заканчивающемуся на .php. Имя файла ДОЛЖНО совпадать с именем завершающего класса
Реализация автозагрузчика НЕ ДОЛЖНА генерировать исключения, НЕ ДОЛЖНА вызывать ошибки любого уровня и НЕ ДОЛЖНА возвращать значение.
Примеры реализации автозагрузчиков, соответствующих спецификации, можно найти в файле с примерами
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
Настройка автозагрузки PSR-4 с Composer
#Создать структуру каталогов
mkdir -p src/example
mkdir -p src/test
mkdir -p src/file
#Создать файлы с классами
touch src/file/File1.php
touch src/example/Example1.php
touch src/test/Test1.php
#Создать файл index.php, который будет создавать объекты
touch src/index.php
#Создать файл composer.json в корне проекта
touch composer.json
#composer.json
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
#src/file/File1.php
namespace App\file;
class File1
{
public function ShowFile()
{
echo "File1\n";
}
}
#src/index.php
require '../vendor/autoload.php';
use App\file\File1;
$file = new File1();
$file -> ShowFile();
#
#установка composer
sudo apt install composer
#Создание скрипта автозагрузки
composer dump-autoload
Generating autoload files
Generated autoload files
#Запуск приложения
php8.4 src/index.php
PSR-4 также позволяет настраивать, в том числе использовать несколько базовых каталогов или настраивать, как пространства имён сопоставляются с каталогами.
В этом примере пространство имён App сопоставлено с двумя разными каталогами, src/ и lib/. Composer будет искать классы в пространстве имён App в обеих директориях, обеспечивая гибкость в организации проекта.
// composer.json
{
"autoload": {
"psr-4": {
"App\": ["src/", "lib/"]
}
}
}
Можно исключить из автозагрузки определённые файлы или каталоги, добавив директиву exclude-from-classmap:
// composer.json
{
"autoload": {
"psr-4": {
"App\": "src/"
},
"exclude-from-classmap": [
"src/Legacy/"
]
}
}
Команду composer dump-autoload необходимо запускать для регенерации скрипта автозагрузки после каждого добавления новых классов или каталогов.
Библиотеки
Как только в каталоге появляется composer.json, этот каталог становится пакетом. Добавляя require в проект, вы создаёте пакет, который зависит от других пакетов. Единственное отличие вашего проекта от библиотеки заключается в том, что ваш проект — это пакет без имени.
Чтобы установить этот пакет, вам нужно дать ему имя. Для этого добавьте свойство name в composer.json
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
Composer определяет версии на основе вашей системы контроля версии
Если вы поддерживаете пакеты вручную (то есть без системы контроля версий), вам нужно будет явно указать версию, добавив значение version в файл composer.json
{
"version": "1.0.0"
}
Если у вас есть репозиторий VCS (системы контроля версий, например git), содержащий файл composer.json, то ваша библиотека уже доступна для установки через Composer. В этом примере мы опубликуем библиотеку acme/hello-world на GitHub под github.com/username/hello-world.
Если вы не хотите фиксировать файл блокировки и используете git, добавьте его в .gitignore
Теперь, чтобы протестировать установку пакета acme/hello-world, мы создадим новый проект локально. Мы назовём его acme/blog. Этот блог будет зависеть от acme/hello-world, который, в свою очередь, зависит от monolog/monolog. Мы можем сделать это, создав где-нибудь новый каталог blog с файлом composer.json:
{
"name": "acme/blog",
"require": {
"acme/hello-world": "dev-master"
}
}
В данном случае название не требуется, так как мы не хотим публиковать блог как библиотеку. Оно добавлено здесь, чтобы было понятно, какой composer.json объект описывается.
Теперь нам нужно указать приложению для ведения блога, где искать зависимость hello-world . Для этого мы добавляем в composer.json блога спецификацию репозитория пакетов:
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
Теперь вы можете установить зависимости, выполнив команду install в Composer
Любой репозиторий git/svn/hg/fossil, содержащий composer.json, можно добавить в ваш проект, указав репозиторий пакета и объявив зависимость в поле require.
install
Установка окружения composer
Дополнительные опции:
--dry-run: Если вы хотите выполнить установку без фактического установки пакета, вы можете использовать --dry-run. Это позволит смоделировать установку и увидеть, что произойдёт
--download-only: Только загрузка, без установки пакетов
--no-autoloader: Пропускает генерацию автозагрузчика.
--classmap-authoritative (-a): Автозагрузка классов только из classmap.
update
Чтобы получить последние версии зависимостей и обновить файл composer.lock, используйте команду update
--no-install: не выполняет этап установки после обновления файла composer.lock
--no-dev: Пропустить установку пакетов, перечисленных в require-dev
--no-autoloader: Пропускает генерацию автозагрузчика.
--ignore-platform-reqs игнорирует все требования к платформе (php, hhvm, lib-* и ext-*) и принудительно устанавливает приложение, даже если локальный компьютер им не соответствует.
--ignore-platform-req: игнорирует конкретное требование к платформе(php, hhvm, lib-* и ext-*) и принудительно устанавливает пакет, даже если локальный компьютер не соответствует этому требованию
--ignore-platform-req: игнорирует конкретное требование к платформе(php, hhvm, lib-* и ext-*) и принудительно устанавливает пакет, даже если локальный компьютер не соответствует этому требованию
--prefer-stable: Предпочитать стабильные версии зависимостей
--prefer-lowest: Предпочитать самые низкие версии зависимостей.
Источник: https://getcomposer.org/doc/03-cli.md#bash-completions
require
Команда require добавляет новые пакеты в файл composer.json из текущего каталога. Если файл не существует, он будет создан на лету.
Если вы не укажете пакет, Composer предложит вам выполнить поиск пакета и предоставит список подходящих пакетов для установки.
Если вы не укажете ограничение по версии, Composer выберет подходящую версию на основе доступных пакетов.
composer require
php composer.phar require "vendor/package:2.*" vendor/package2:dev-master
Если вы не хотите устанавливать новые зависимости сразу, вы можете вызвать команду с параметром --no-update
Некоторые опции:
--dev: Добавьте пакеты в require-dev
--dry-run: Имитация выполнения команды без фактического выполнения
--no-update: отключает автоматическое обновление зависимостей (подразумевает --no-install).
--no-install: не выполняет этап установки после обновления файла composer.lock.
remove / rm / uninstal
Команда remove удаляет пакеты из файла composer.json в текущем каталоге.
--dev: Удалить пакеты из require-dev
composer remove php-curl-class/php-curl-class
reinstall
Команда reinstall ищет установленные пакеты по названию, удаляет их и переустанавливает. Это позволяет выполнить чистую установку пакета, если вы изменили его файлы или хотите изменить тип установки с помощью --prefer-install.
Вы можете указать несколько имён пакетов для переустановки или использовать подстановочный знак, чтобы выбрать сразу несколько пакетов:
composer.phar reinstall acme/foo acme/bar
php composer.phar reinstall "acme/*"
check-platform-reqs
Команда check-platform-reqs проверяет, соответствуют ли версии PHP и расширений требованиям платформы для установленных пакетов. С её помощью можно, например, убедиться, что на рабочем сервере установлены все расширения, необходимые для запуска проекта после его установки.
Опции
--lock: Проверяет требования только из файла блокировки, а не из установленных пакетов.
--no-dev: отключает проверку требований к пакетам require-dev.
--format (-f): Формат вывода: текст (по умолчанию) или json
search
Команда поиска позволяет выполнять поиск в репозиториях пакетов текущего проекта. Обычно это packagist. Вы указываете условия поиска.
Опции --only-name (-N): Поиск только по названиям пакетов.
--only-vendor (-O): поиск только по названиям поставщиков / организаций, в результате возвращается только слово «поставщик».
--type (-t): Поиск пакетов определённого типа.
composer search monolog
show
Чтобы вывести список всех доступных пакетов, можно использовать команду show .
Опции:
--all: Вывести список всех пакетов, доступных во всех ваших репозиториях.
--locked: Список заблокированных пакетов из файла composer.lock.
--platform (-p): Показать только пакеты платформы (php и расширения).
--available (-a): Выводит список только доступных пакетов
--self (-s): Вывести информацию о корневом пакете.
--name-only (-N): Выводит только названия пакетов.
--path (-P): Список путей к пакетам.
--tree (-t): Выведите список зависимостей в виде дерева
--latest (-l): Вывести список всех установленных пакетов, включая их последнюю версию
--no-dev: Отфильтровывает зависимости для разработчиков из списка пакетов.
--strict: Возвращает ненулевой код завершения при наличии устаревших пакетов
#Все доступные пакеты
composer show
#Подстановочные знаки
composer show "monolog/*"
#Информация по определенному пакету
composer show monolog/monolog
#Указать версию пакета
composer show monolog/monolog 1.0.2
outdated
Команда outdated показывает список установленных пакетов, для которых доступны обновления, включая их текущую и последнюю версии
Цветовая кодировка выглядит следующим образом: зелёный (=): Зависимость установлена в последней версии и обновлена.
жёлтый (~): доступна новая версия зависимости, которая нарушает обратную совместимость в соответствии с semver, поэтому обновляйте её, когда это возможно, но это может потребовать дополнительных усилий.
красный (!): у зависимости появилась новая версия, совместимая с semver, и вам следует обновить её.
browse / home
browse (также известный как home) открывает в вашем браузере URL-адрес репозитория пакета или его домашнюю страницу.
composer browse twig/twig
depends
Команда depends показывает, какие ещё пакеты зависят от определённого пакета
Добавьте флаг --tree или -t , чтобы отобразить рекурсивное дерево зависимостей пакета
composer depends twig/twig
prohibits
Команда prohibits сообщает, какие пакеты блокируют установку заданного пакета
composer prohibits php 8
validate
Вы всегда должны запускать validate команду перед фиксацией вашего composer.json файла (и composer.lock если применимо) и перед тем, как пометить релиз.
Он проверит, действителен ли ваш composer.json . Если composer.lock существует, он также проверит, соответствует ли он composer.json
Опции
--no-check-all: Не выдавать предупреждение, если в требованиях в composer.json используются неограниченные или слишком строгие ограничения по версии.
--no-check-lock: Не выдавать ошибку, если composer.lock существует и не обновлено.
--check-lock Проверить, обновлен ли файл блокировки (даже если config.lock имеет значение false)
--no-check-publish: Не выдавать ошибку, если composer.json не подходит для публикации в качестве пакета на Packagist, но в остальном является допустимым.
--no-check-version: Не выдавать ошибку, если указано поле версии.
--with-dependencies: Также проверьте composer.json всех установленных зависимостей.
composer validate --no-check-publish
status
Если вам часто приходится вносить изменения в код зависимостей, установленных из исходного кода, команда status позволяет проверить, есть ли у вас локальные изменения в какой-либо из них.
С помощью опции --verbose вы получите дополнительную информацию о том, что было изменено
composer status -v
config
Команда config позволяет редактировать настройки конфигурации Composer и репозитории либо в локальном файле composer.json, либо в глобальном файле config.json
config [options] [setting-key] [setting-value1] ... [setting-valueN]
setting-key — это имя параметра конфигурации, а setting-value1 — значение конфигурации
composer config --list
repository
Команда repo позволяет управлять репозиториями в вашем composer.json. Она более мощная, и её рекомендуется использовать вместо composer config repositories.* для управления конфигурацией репозиториев.
composer repo list
create-project
С помощью Composer можно создавать новые проекты на основе существующего пакета. Это эквивалентно выполнению команды git clone/svn checkout с последующим composer install для поставщиков
php composer.phar create-project doctrine/orm path "2.2.*"
dump-autoload
Если вам нужно обновить автозагрузчик, например, из-за появления новых классов в пакете classmap, вы можете использовать dump-autoload для этого без необходимости выполнять установку или обновление.
Кроме того, он может использовать оптимизированный автозагрузчик, который преобразует пакеты PSR-0/4 в пакеты classmap для повышения производительности.
clear-cache
Удаляет все содержимое из каталогов кэша Composer
Опции
--gc: Выполнить только сборку мусора, без полной очистки кэша
run-script
Скрипты полезны для выполнения пользовательского кода пакета или команд, специфичных для пакета, в процессе работы Composer.
Опции --timeout: Установите время ожидания выполнения скрипта в секундах или 0, чтобы время ожидания не устанавливалось. --dev: Включает режим разработки.
--no-dev: Отключить режим разработки.
--list (-l): Список пользовательских скриптов.
diagnose
Если вам кажется, что вы нашли ошибку или что-то работает странно, вы можете запустить команду diagnose для автоматической проверки на наличие многих распространённых проблем.
composer diagnose
archive
Эта команда используется для создания zip/tar-архива для заданного пакета в заданной версии. Её также можно использовать для архивирования всего проекта без исключённых/игнорируемых файлов
php composer.phar archive vendor/package 2.0.21 --format=zip
audit
Эта команда используется для проверки установленных пакетов на наличие потенциальных проблем с безопасностью.
Команда audit определяет, есть ли уязвимые или заброшенные пакеты
help
Чтобы получить дополнительную информацию об определённой команде, используйте help.
php composer.phar help install
composer help install
Command-line completion
Автодополнение командной строки можно включить, выполнив команду composer completion --help и следуя инструкциям.
Environment variables
Вы можете задать ряд переменных среды, которые переопределяют определённые настройки. По возможности рекомендуется указывать эти настройки в разделе config вместо composer.json. Стоит отметить, что переменные среды всегда будут иметь приоритет над значениями, указанными в composer.json.
COMPOSER_ALLOW_SUPERUSER - Если установлено значение 1, эта переменная отключает предупреждение о выполнении команд от имени пользователя root
COMPOSER_AUTH var позволяет настроить аутентификацию в качестве переменной среды
COMPOSER_CACHE_DIR позволяет изменить каталог кэша Composer
COMPOSER_MEMORY_LIMIT - Если установлено, то это значение используется в качестве memory_limit в PHP.
COMPOSER_VENDOR_DIR - Установив этот параметр, вы можете настроить Composer на установку зависимостей в каталог, отличный от vendor
COMPOSER_MAX_PARALLEL_PROCESSES - Задайте целое число, чтобы указать, сколько процессов может выполняться параллельно.
COMPOSER_DISABLE_NETWORK - Если установлено значение 1, доступ к сети отключается (по возможности)






