composer

Введение в composer, использование 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, доступ к сети отключается (по возможности)


    Источники
    Последнее изменение: 21.02.2026 16:05


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ