Что такое composer и зачем он нужен?
Если вы хотите научиться серьезно работать с языком программирования PHP, то вам нужно обязательно освоить такой инструмент как Composer.
Давайте разберемся в этом видео, что такое Composer и зачем этот инструмент вам может пригодиться.
Composer — это просто программа, которая работает «в связке» с языком программирования PHP.
Без PHP использование composer просто не имеет смысла.
Официальная ссылка на сайт composer:
Composer — это консольная программа. Это означает то, что у этой программы нет какого-либо графического интерфейса. Управлять этой программой мы с вами можем набирая команды в терминале операционной системы.
В каждой операционной системе есть терминал или консоль. Это некое окно, в котором можно вводить команды с помощью клавиатуры.
Composer — это та программа, которая работает через консоль (терминал).
Графических элементов по которым можно покликать и повзаимодействовать в этой программе нет.
Composer — это менеджер зависимостей для языка программирования PHP.
Если вы работали с фронтенд проектами, которые написаны на языке программирования Javascript, на HTML, на CSS, вам, возможно, приходилось уже встречаться с таким понятием как менеджер пакетов. Это такие программы, как npm или yarn.
Composer — это менеджер зависимостей, который написан именно для языка PHP, в отличии от npm и yarn.
Что же такое «зависимость»? Что же это за менеджер, который управляет зависимостями.
Предположим, мы создаем какой-нибудь php-проект. В этом проекте будут какие-то файлы. В какой-то момент времени развития этого проекта мы понимаем, что писать весь код самостоятельно — это не самая лучшая работа. Есть решения, которые написаны уже за нас и можно просто их применить в нашем проекте.
Такие решения называются библиотеки, зависимости или пакеты.
К примеру, вы разрабатываете какой-либо Интернет магазин и вам нужно написать какой-то модуль, который бы отправлял сообщение на email пользователя. Написать такой модуль с нуля довольно трудно.
Но, к счастью, уже есть готовые решения, которые могут решить эту задачу намного проще и быстрее.
Например, есть такая библиотека как swiftmailer. Подключив ее к проекту мы получаем все необходимые классы и методы для работы с email.
Composer — это менеджер для подключения и управления этими сторонними библиотеками или пакетами в вашем PHP-проекте.
Еще его называют пакетный менеджер.
Composer управляет этими пакетами, чтобы они подключились и хорошо работали.
Конечно, вполне возможно обойтись и без composer для того, чтобы создавать php-проекты. Можно подключить все библиотеки вручную и все будет отлично работать.
Зачем же в таком случае нужен composer?
- Много рутинных операций при установке.
Нужно производить настройки, подстраивать автозагрузку компонентов и.т.д.
2. Трудность в обновлении библиотек на новые версии.
Библиотеки имеют такое свойство расширяться и обновляться. Если вы вручную будете обновлять каждый пакет в вашем проекте, это работа довольно трудная и большая.
В composer для обновления пакетов достаточно выполнить одну команду и все пакеты успешно обновляться.
3. Одна библиотека может требовать для своей работы другую, другая третью и.т.д.
В итоге, может получаться ряд зависимостей, которые вы должны подключать.
Бывают такие библиотеки, которые для своей работы могут требовать десяток и даже сотни других библиотек.
Если это все скачивать и подключать вручную на это может уйти месяцы работы.
В случае с composer вы просто выполняете команду установки какой-либо библиотеки и он уже автоматически подключит все необходимые для этого другие библиотеки.
Пожалуй, это самое важное преимущество почему стоит использовать composer в своей работе.
4. Трудность переноса проекта на рабочий сервер из-за большого объема библиотек.
В вашем проекте код самого проекта может занимать всего десятки килобайт, а библиотеки, которые подключены к этому проекту могут занимать сотни и 10-ки сотен мегабайт.
Для того, чтобы перенести изменения на рабочем сервере, вам каждый раз нужно будет передавать такой большой объем данных.
Решение этой проблемы с composer довольно простое. В программе composer есть файл настроек, который вы устанавливаете на вашем домашнем компьютере и файл настроек, который вы устанавливаете на удаленном компьютере.
Можно сделать так, чтобы все библиотеки появились на удаленном сервере, выполнением всего одной команды composer и все библиотеки скачаются автоматически.
Пожалуй, это все основные возможности, которые я хотел выделить в программе composer. Это то основное, что на начальном этапе важно знать и понимать.
Конечно, создавать проекты без composer на PHP можно, но нужно ли вам это?
Если пользоваться любым современным фреймворком (symfony, laravel), то без composer вообще не обойтись.
Такой вот важный инструмент. Очень рекомендую освоить его работу, чтобы повысить свой уровень знаний и продвинуться в веб-программировании.
Composer часть 1. Зачем его использовать в PHP проектах и как с ним работать?

Software Engineer в Mobilunity, Преподаватель Компьютерной школы Hillel.
- 1. Как установить Composer
- 2. Установка — Linux/Unix/macOS
- 3. Установка — Windows
- 4. Синтаксис и опции Composer
- 5. Установка проекта на основе пакета
- 6. Установка пакетов
- 7. Обновление пакетов
- 8. Удаление пакетов
- 9. Сброс автозагрузки
- 10. Выводы
Язык программирования PHP стремительно развивается с каждым годом. Каждый месяц регистрируют десятки, а то и сотни библиотек для работы с PHP проектами. На сайте packagist указано, что с 2012 года было зарегистрировано более 330 тысяч библиотек. Буквально несколько запущенных команд в терминале — и любая из этих библиотек уже подключена к вашему проекту.
Звучит заманчиво, правда? И всё же, как это реализовать?
Именно Composer поможет справиться вам с такой задачей!
Composer PHP что это и как с ним работать?
Итак, Composer — менеджер пакетов для PHP. Этот инструмент позволяет не только устанавливать сторонние пакеты, но и обновлять их при выходе более новых версий. Также с помощью Composer можно легко создавать пакеты для своих библиотек.
Как установить Composer на хостинг
Composer можно установить локально, в директории проекта, или глобально. Установив Composer глобально, его можно использовать в любом проекте.
Подробную инструкцию по скачиванию инсталлятора можно прочитать по этой ссылке. После скачивания файла установки можем приступить к установке Composer.
Установка — Linux/Unix/macOS
Локально
После правильной загрузки и установки инсталлятора в директории проекта появится файл ‘composer.phar’.
Чтобы запустить Composer локально, достаточно выполнить команду в терминале, находясь в директории проекта.
php composer.phar
Глобально
Для того, чтобы сделать Composer глобальным и вызывать его из любой директории, достаточно выполнить команду в терминале:
mv composer.phar /usr/local/bin/composer
Теперь запустите composer, чтобы запустить менеджер пакетов вместо php composer.phar.
Установка — Windows
Для того, чтобы установить Composer глобально для ОС Windows, надо выполнить следующие шаги:
Создайте новый composer.bat файл рядом с composer.phar:
C:\bin> echo @php "%~dp0composer.phar" %*>composer.bat
PS C:\bin> Set-Content composer.bat '@php "%~dp0composer.phar" %*'
Добавьте каталог в переменную среды PATH, если это еще не сделано. Для получения информации об изменении переменной PATH, смотрите эту статью.
Закройте текущий терминал. В новом окне терминала введите следующую команду для проверки работы Composer:
C:\Users\username>composer -V Composer version 2.0.12 2021-04-01 10:14:59
Синтаксис и опции Composer
Первое, что необходимо сказать, Composer — это консольная утилита, у неё нет графического интерфейса, однако это не делает её хуже. Её синтаксис довольно прост, а посмотреть все опции и команды можно введя команду ‘composer’ в терминале. Список всех опций и команд можно рассмотреть ниже:
- -h — вывести справку по утилите
- -q — сокращённый вариант вывода
- -V — показать версию утилиты
- -n — не задавать интерактивные вопросы
- -v, -vv,-vvv — настройка подробности вывода
- -d — использовать указанную рабочую директорию
Список часто используемых команд:
- archive — архивирует текущий проект в качестве библиотеки для отправки в сеть
- check-platform-reqs — проверяет, соблюдены ли системные требования
- create-project — создаёт проект на основе пакета в указанную директорию
- depends — выводит зависимости пакета
- dump-autoload — обновляет систему автозагрузки классов
- exec — позволяет выполнять скрипты из установленных пакетов
- init — создаёт пустой проект в текущей папке
- list — выводит список доступных команд
- outdated — выводит список пакетов, для которых есть обновления
- prohibits — выводит названия пакетов, которые мешают установить указанный пакет
- search — поиск пакетов в репозиториях
- self-update — обновление Composer до последней версии, работает только при локальной установке
- show — информация о пакете
- update — обновляет все пакеты до самой актуальной версии
Установка проекта на основе пакета
Скорее всего, для будущих проектов, вы будете использовать фреймворки, чтобы иметь базовый функционал из коробки. В таких случаях вам понадобится разворачивать проект на основе существующего пакета, Composer скачает пакет из репозитория и просто распакует его в нужную вам директорию.
Для этого используйте команду create-project, например:
composer create-project laravel/laravel app_dir
- composer — обращение к утилите
- create-project — команда
- laravel/laravel — пакет фреймворка laravel
- app_dir — директория, в которую Composer распакует указанный пакет
Установка пакетов
Чтобы установить пакет с помощью Composer, необходимо использовать команду require. Утилита установит указанный вами пакет и запишет его в файл composer.json.
Например, установим пакет для удобного вывода переменных:
composer require larapack/dd
Также можно указать опцию —dev перед написанием названия пакета, чтобы пакет был обязателен, но использовался только в разработке.
Все доступные пакеты можно просмотреть на сервисе Packagist.
Обновление пакетов
Пакеты необходимо обновлять во избежание уязвимостей в проектах и устранения старых проблем со стороны подключенных библиотек.
Для обновления всех пакетов достаточно ввести команду update:
composer update
composer update –dev
Удаление пакетов
Для удаления пакета необходимо ввести команду remove и указать нужный пакет, также можно добавить опцию –dev, если это пакет для разработчиков.
composer remove larapack/dd
Также можно убрать ненужные пакеты в файле composer.json и запустить команду на обновление.
Сброс автозагрузки
Composer из коробки может выступать в роли автозагрузчика классов. Он использует стандарт PSR-4. Иногда случается, что классы закешировались, и новый класс не виден в проекте.
В таких случаях необходимо выполнить команду сброса:
composer dump-autoload
composer du
Выводы
Composer — это достаточно мощная утилита для того, чтобы сделать вашу работу с проектом комфортной. С её помощью вы легко сможете добавлять, обновлять и удалять необходимые вам пакеты. Также приятным бонусом является то, что утилита предоставляет автозагрузчик классов из коробки.
В следующей статье мы поговорим с вами об создании собственного пакета с помощью Composer и о том, как его добавлять на сервис packagist.
Рекомендуем публикацию по теме

- Composer часть 2. Создание собственной библиотеки. Загрузка на Packagist читать 10 мин

Software Engineer в Mobilunity, Преподаватель Компьютерной школы Hillel.
Composer для самых маленьких
Когда я первый раз разбирался с composer, я набросал для себя маленькую шпаргалку и теперь, спустя некоторое время представляю её на суд общественности в несколько доработанном виде.
Данная публикация актуальная для тех, кто в первый раз столкнулся с незаменимым менеджером пакетов для PHP.
Итак, Composer — менеджер пакетов для PHP.
Для чего нужен Composer и простейший пример его использования
Возьмем для примера этот проект
Если в двух словах: то это набор скриптов для работы в VK API
Соответственно, для работы этих скриптов нужно несколько библиотек
Библиотеки перечислены в файле composer.json — ключевой файл при работе с composer
В этом проекте используется 5 библиотек. Соответственно, если разработчик решит опубликовать этот проект на github, то ему достаточно закинуть в репу саму папку со скриптами и составить composer.json, в котором будут описаны библиотеки, необходимые для работы этого проекта. Простота очевидна: в репу не нужно вслед за файлами прицепом тащить все нужные библиотеки. Занимает меньше места, проще распространять проект.
В папке scripts лежат непосредственно скрипты проекта, для работы которых и требуются эти 5 пакетов.
Запускаем установку пакетов:
После установки появляется папка vendor, куда складываются установленные пакеты и формируется файл autoload.php
Этот файл подключаем к проекту и всё — библиотеки подключены, можно спокойно с ними работать.
Простота очевидна: не нужно скачивать и подключать библиотеки и их зависимости самостоятельно, composer всё сделает за Вас. И вся эта пачка подключается одним единственным файлом autoload.php
Все пакеты, которые лежат в vendor, добавляются в автозагрузчик. При этом composer опирается на файлы composer.json, которые должны быть у каждого пакета. Формирование composer.json пакета — это задача разработчика пакета, от потребителя пакета требуется лишь описать в composer.json проекта, какие пакеты нужно подключить.
Это пример composer.json проекта:
Это пример composer.json пакета:
В секции require прописана зависимость этого пакета — библиотека guzzle http, необходимая для работы библиотеки getjump/vk. В данном случае, т.е. с точки зрения потребителя пакетов, всевозможные зависимости пакетов — это не наша «забота», с зависимостями composer разберётся сам.
Пространство имён пакета прописано в секции autoload
getjump\\Vk\\ — наименование пространства имён
src/getjump/Vk/ — директория, в которой лежат файлы с классами пакета
Работа с этой библиотекой в проекте:
Core и Friends — это классы библиотеки, которые разложены и прописаны в папке src в соответствии со стандартом PSR-4. Опять же формирование структуры пакета — это работа создателя пакета.
Нам, как потребителю пакета, достаточно прописать в наш проект
include ‘../vendor/autoload.php’;
и все эти классы и пространства имён будут отлично работать.
При этом нам не нужно заморачиваться и писать автозагрузчик. Composer это сделает сам при выполнении команды install.
Установка
Установка Composer глобально
1) Для начала нужно что бы путь к директории с интерпретатором PHP был прописан в переменной окружения path.
Проверим, так ли это:
php –version
Если вывод получился типа такого, то этот шаг можно пропустить
На примере Windows 7
Система -> Дополнительные параметры системы -> Дополнительно -> Переменные среды
Далее нас будет интересовать переменная path:
Вписываем путь к интерпретатору
*С давних времён у меня на компьютере лежит сборка xampp, сама сборка здесь нафиг не нужна, а вот интерпретатор с неё вполне подойдёт (версия PHP – 5.6).
2) Перезапускаем терминал.
Создаём директорию и ставим composer (я ставил на диск D)
D:
cd /
mkdir bin
cd bin
php -r «readfile(‘https://getcomposer.org/installer’);» | php
echo php «%~dp0composer.phar» %*>composer.bat
3) Добавим в переменную окружения path путь к composer.bat, например для D:\bin должно получиться:
Дополнительно можно добавить в path
D:\Users\%userName%\AppData\Roaming\Composer\vendor\bin\
для того, что-бы было удобнее использовать инструменты, глобально установленные через Composer.
(У меня папка Users располагается на диске D, а на C создан симлинк на неё).
Всё, composer установлен и полностью готов к работе.
Ещё: при установке можно словить ошибку
[RuntimeException]
The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly
Решение нашлось здесь github.com/composer/composer/issues/2033
Добавляем переменную APPDATA со значением D:\Users\GSU\AppData\Roaming
Установка Composer локально
Есть вариант ещё поставить composer локально, но в большинстве случаев в этом нет явной необходимости.
Однако тут установка ещё проще.
Т.к. программа глобально не установлена, нужен загрузочный файл(мини-программа composer), для его загрузки пишем команду:
php -r «readfile(‘https://getcomposer.org/installer’);» | php
теперь в директории проекта появился файл composer.phar
Всё, можно использовать.
php composer.phar require [название пакета]
Отличия глобальной и локальной установки
Команды запускаются по разному при локальной и глобальной установках:
Например:
Локально: php composer.phar require silex/silex ~1.1
Глобально: composer require silex/silex ~1.1
При локальной установке нужно каждый раз скачивать установочный файл в папку текущего проекта
php -r «readfile(‘https://getcomposer.org/installer’);» | php
При глобальной установке этот файл не нужен. Composer запускается при любой текущей директории.
Команды
install — установка пакетов, прописанных в composer.json
update – обновление пакетов
dumpautoload — пересборка автозагрузчика
require somepackage/somepackage:someversion — добавление нового пакета (по умолчанию пакеты ставятся из оф. репозитория). При установке пакет прописывается в composer.json
update —lock — обновление файла блокировки composer.lock
config —global cache-files-maxsize «2048MiB» — пример изменения параметра конфигурации
—profile — добавление этого параметра к любой команде включит показ времени выполнения и объёма использованной памяти
—verbose — подробная инфомация о выполняемой операции
show —installed — список установленных пакетов с описанием каждого
show —platform — сведения о PHP
—dry-run — репетиция выполнения команды. Может добавляться к командам install и update. Эмулирует выполнение команды без её непосредственного выполнения. Необходим для того, чтобы проверить пройдёт ли установка пакетов и зависимостей успешно.
remove — удаление пакета. Точная противоположность require
Синтаксис composer.json
Именование пакетов и варианты описания пакетов
Имя пакета состоит из двух частей разделёных косой чертой: названия поставщика (vendor name) и названия библиотеки.
Если пакет оформлен в соответствии со стандартом PSR-4, но опубликован не на packagist.org, а на github, то вместо версии пакета нужно прописать ветку и репозиторий для этого пакета:
Пример подключения библиотеки, которая лежит на github, но при этом не оформлена по стандарту PSR-4, а представляет из себя обыкновенное нагромождение файлов с классами и функциями.
Pqr/superlib — эта та самая «неправильная» библиотека.
В секции repositories для неё пишем такую конструкцию
Ключевой момент — секция autoload, здесь указываем нужные нам файлы с классами и функциями.
Структура библиотеки:
Соответственно в проекте вызов getCurrentTime() будет выглядеть примерно так:
$timer = new pqr\superlib\TimerClass;
echo $timer->getCurrentTime();
Версионирование
При указании допустимых версий пакетов можно использовать точное соответствие (1.2.3), диапазоны с операторами сравнения (<1.2.3), комбинации этих операторов (>1.2.3 <1.3), “последняя доступная” (1.2.*), символ тильды (~1.2.3) и знак вставки (^1.2.3).
Указание тильды (~1.2.3) будет включать в себя все версии до 1.3 (не включительно), так как в семантическом версионировании это является моментом внедрения новых функциональных возможностей. В данном случае будет получена последняя из стабильных минорных версий. Т.е. будет меняться только последняя цифра — 1.2.5, 1.2.8 и тд.
Указание знака вставки (^1.2.3) буквально означает “опасаться только критических изменений” и будет включать в себя версии вплоть до 2.0. Применительно к семантическому версионированию, изменение мажорной версии является моментом внесения в проект критических изменений, так что версии 1.3, 1.4 и 1.9 подходят, в то время как 2.0 — уже нет.
Т.е. не меняется только первая цифра.
Тильда: ~1.2.3 — это самый распространённый и безопасный способ указания версии.
Файл composer.lock
Файл composer.lock сохраняет текущий список установленных зависимостей и их версии. Таким образом, на момент, когда версии зависимостей уже будут обновлены (команда update), другие люди, которые будут клонировать ваш проект, получат те же самые версии. Это позволяет убедиться в том, что каждый, кто получает ваш проект, имеет пакетное окружение, идентичное тому, которое вы использовали при разработке, и помогает избежать ошибок, которые могли бы возникнуть из-за обновления версий.
При каждом выполнении команды update версии обновлённый пакетов прописываются в composer.lock. Этот файл загоняется под систему контроля версий и при установке пакетов на новом сервере поставятся именно те версии пакетов, которые прописаны в этом файле. При выполнении команды install composer будет в первую очередь опираться на composer.lock. Таким образом на разных серверах будет гарантированно установлено одинаковое пакетное окружение с точки зрения версий.
Также, файл composer.lock содержит хэш файла composer.json.
И если json файл был отредактирован, то composer выдаст предупреждение, что файл lock не соответствует json файлу.
В таком случае, нужно выполнить команду composer update —lock, которая обновит composer.lock.
Отличие install от update в контексте использования composer.lock
Команда composer install делает следующее:
Проверяет существует ли composer.lock:
— если нет, резолвит зависимости и создаёт его
— если composer.lock существует, устанавливает версии, указанные в нём
Команда composer update:
— Проверяет composer.json
— Определяет последние версии на основе указанных в этом файле
— Устанавливает последние версии
— Обновляет composer.lock в соответствии с установленными
Пример использования с точки зрения создателя проекта
Имеется проект без установленных пакетов
Поставили несколько библиотек
У нас сформировался composer.json с информацией о пакетах
Мы можем его дополнить и распространять проект с этим файлом
Другой пользователь скачал наш проект, выполнил install и у него в проекте развернулись все нужные пакеты
Пример использования с точки зрения создателя пакета
Для примера я создал класс с методом, который будет выводить URL текущей страницы
Класс оформлен как пакет и залит на github.
Регистрируюсь на оф. репозитории и добавляю пакет, указывая ссылку на репозиторий, в котором он лежит
Всё, пакет добавлен
Проверяю работоспособность пакета
Пакет поставился, вот наш класс:
Composer и PhpStorm
Конфигурирование возможности редактирования Composer пакетов
Если опция выставлена, то нельзя будет так просто взять и отредактировать файлы внутри vendor/*/*
Нюансы, тонкости, сложные ситуации
Ошибка: Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. Nothing to install or update
Решение: composer update —lock
Долго выполняется update при большом числе установленных библиотек
Composer проверяет все зависимости пакетов, а если пакетов много — то это надолго.
Решение: если нужно обновить только одну библиотеку, то указываем её явно:
composer update package/name
Ещё можно добавлять параметр «—prefer-dist» (хотя, по идее, он должен быть включён по умолчанию), тогда composer будет стараться ставить библиотеку из zip-архива, а не клонировать репозиторий.
The «****.json» file could not be downloaded: failed to open stream: HTTP request failed!
Composer пытается дергануть пакет по HTTP, хотя нужно по HTTPS
Решение: composer config —global repo.packagist composer packagist.org
The package is not available in a stable-enough version according to your minimum-stability setting
see for more details.
Стабильной версии у пакета нет, а установка dev версии не разрешена в конфиге.
Решение: либо выставить параметр «minimum-stability»: «dev» и «prefer-stable»: true, чтобы ставить по возможности стабильные версии, либо — если это ваш собственный пакет — создать тег с версией (стикер stable в readme на github должен показывать версию)
История развития и ключевые изменения
— первый релиз состоялся 1 марта 2012 и весь 2012 инструмент активно развивается
— январь 2014 — реализована автозагрузка на основе PSR-4
— март 2016 — вышла в свет бета-версия (1.0.0-beta1). Добавлены команды show —tree для отображения установленных пакетов в виде дерева, why-not — показывает почему нельзя уставить пакет, update —interactive — позволяет выбрать какие пакеты обновлять, а также множество других улучшений и исправлений.
— 4 апрель 2016 — был представлен первый стабильный релиз Composer — 1.0.0
Декабрь 2014 — один из ключевых коммитов в репозиторий composer
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
Суть изменения — отключён сборщик мусора
Ссылки
Офсайт: getcomposer.org
Официальный репозиторий пакетов: packagist.org
Репозиторий composer: github.com/composer/composer
Отличный большой туториал по использованию Composer: daylerees.com/composer-primer
Список команд и подробный пример файла composer.json: composer.json.jolicode.com
Composer
Эту статью можно было бы также назвать «Composer для самых маленьких».
Данная публикация актуальная для тех, кто в первый раз столкнулся с незаменимым менеджером пакетов для PHP.
Итак, Composer — менеджер пакетов для PHP.
Для чего нужен Composer и простейший пример его использования
Возьмем для примера этот проект.
Если в двух словах: то это набор скриптов для работы в VK API. Соответственно, для работы этих скриптов нужно несколько библиотек. Библиотеки перечислены в файле composer.json — ключевом файле при работе с composer.
< "name": "dosjein/vkdeepmine", "description": "DeepMine service for Vkontakti", "license": "top-secret", "authors": [ < "name": "John Dosje", "email": "dosjein@gmail.com" >], «minimum-stability»: «dev», «require»: < "vlucas/phpdotenv": "~1.", "erusev/parsedown": "^1.6", "getjump/vk": "*", "guzzlehttp/guzzle": "*" >>
В этом проекте используется пять библиотек. Если разработчик решит опубликовать этот проект на github, то ему достаточно закинуть в репозиторий папку со скриптами и составить composer.json, в котором будут описаны библиотеки, необходимые для работы этого проекта. В репозиторий не нужно вслед за файлами прицепом тащить все нужные библиотеки: занимает меньше места, проще распространять проект.
Пример работы.

composer install

После установки появляется папка vendor, куда складываются установленные пакеты и формируется файл


Этот файл подключаем к проекту и всё: библиотеки подключены, можно спокойно с ними работать.
Простота очевидна: не нужно скачивать и подключать библиотеки и их зависимости самостоятельно, composer всё сделает за вас. И вся эта пачка подключается одним единственным файлом autoload.php Все пакеты, которые лежат в vendor, добавляются в автозагрузчик. При этом composer опирается на файлы composer.json, которые должны быть у каждого пакета. Формирование composer.json пакета — это задача разработчика пакета, от потребителя пакета требуется лишь описать в composer.json проекта, какие пакеты нужно подключить.
Пример composer.json проекта
< "name": "dosjein/vkdeepmine", "description": "DeepMine service for Vkontakti", "license": "top-secret", "authors": [ < "name": "John Dosje", "email": "dosjein@gmail.com" >], «minimum-stability»: «dev», «require»: < "vlucas/phpdotenv": "~1.", "erusev/parsedown": "^1.6", "getjump/vk": "*", "guzzlehttp/guzzle": "*" >>
Пример composer.json пакета
< "name": "getjump/vk", "description": "Library for work with API Vk.com", "keywords": ["php", "vk", "api", "library", "vkontakte"], "license": "MIT", "authors": [ < "name" : "Pavel S.", "email" : "contact@getjump.me" >], «require»: < "guzzlehttp/guzzle": "6.*", "php": ">=5.5.0″ >, «require-dev»: < "phpunit/phpunit": "4.1.*" >, «autoload»: < "psr-4": < "getjump\\Vk\\": "src/getjump/Vk/" >> >
В секции require прописана зависимость этого пакета — библиотека guzzle http, необходимая для работы библиотеки getjump/vk. В данном случае, т.е. с точки зрения потребителя пакетов, всевозможные зависимости пакетов — это не наша забота, с зависимостями composer разберётся сам.
Пространство имён пакета прописано в секции autoload:
getjump\\Vk\\ — наименование пространства имёнsrc/getjump/Vk/ — директория, в которой лежат файлы с классами пакета.
src/getjump/Vk/ — директория, в которой лежат файлы с классами пакета.
Пример работы с этой библиотекой в проекте:

Core и Friends — это классы библиотеки, которые разложены и прописаны в папке src в соответствии со стандартом PSR-4. Опять же формирование структуры пакета — это работа создателя пакета.
Нам, как потребителю пакета, достаточно прописать в наш проект:
include ‘../vendor/autoload.php’;
Установка
Установка Composer глобально
1) Для начала нужно, чтобы путь к директории с интерпретатором PHP был прописан в переменной окружения path. Проверим, так ли это:
php –version

Если вывод получился типа такого, то этот шаг можно пропустить.
На примере Windows 7
Система -> Дополнительные параметры системы -> Дополнительно -> Переменные среды. Далее нас будет интересовать переменная path:

Вписываем путь к интерпретатору:
* С давних времён у меня на компьютере лежит сборка xampp, сама сборка здесь не нужна, а вот интерпретатор с неё вполне подойдёт (версия PHP – 5.6).
2) Перезапускаем терминал.
Создаём директорию и ставим composer (я ставил на диск D):
D: cd / mkdir bin cd bin php -r «readfile(‘https://getcomposer.org/installer’);» | php echo php «%~dp0composer.phar» %*>composer.bat

3) Добавим в переменную окружения path путь к composer.bat, например для D:\bin должно получиться:

Чтобы было удобнее использовать инструменты, глобально установленные через Composer, дополнительно можно добавить в path:
D:\Users\%userName%\AppData\Roaming\Composer\vendor\bin\
* У меня папка Users располагается на диске D, а на C создан симлинк на неё.
Всё, composer установлен и полностью готов к работе.
Ещё при установке можно словить ошибку:
[RuntimeException] The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly

Установка Composer локально
Есть вариант поставить composer локально, но в большинстве случаев в этом нет явной необходимости.
Однако, тут установка ещё проще.
Так как программа глобально не установлена, нужен загрузочный файл (мини-программа composer). Для его загрузки пишем команду:
php -r «readfile(‘https://getcomposer.org/installer’);» | php
Теперь в директории проекта появился файл composer.phar
Composer готов к использованию:
php composer.phar require [название пакета]
Отличия глобальной и локальной установок
Команды запускаются по-разному при локальной и глобальной установках:
- локально: php composer.phar require silex/silex ~1.1
- глобально: composer require silex/silex ~1.1
При локальной установке нужно каждый раз скачивать установочный файл в папку текущего проекта
php -r «readfile(‘https://getcomposer.org/installer’);» | php
При глобальной установке этот файл не нужен. Composer запускается при любой текущей директории.
Команды
install — установка пакетов, прописанных в composer.json.
update – обновление пакетов.
dumpautoload — пересборка автозагрузчика.
require somepackage/somepackage:someversion — добавление нового пакета (по умолчанию пакеты ставятся из оф. репозитория). При установке пакет прописывается в composer.json.
update —lock — обновление файла блокировки composer.lock.
config —global cache-files-maxsize «2048MiB» — пример изменения параметра конфигурации.
—profile — добавление этого параметра к любой команде включит показ времени выполнения и объёма использованной памяти.
—verbose — подробная инфомация о выполняемой операции.
show —installed — список установленных пакетов с описанием каждого.
show —platform — сведения о PHP.
—dry-run — репетиция выполнения команды. Может добавляться к командам install и update. Эмулирует выполнение команды без её непосредственного выполнения. Необходима, чтобы проверить, пройдёт ли установка пакетов и зависимостей успешно.
remove — удаление пакета. Точная противоположность require.
Синтаксис composer.json
Имя пакета состоит из двух частей разделёyных косой чертой: названия поставщика (vendor name) и названия библиотеки.
Если пакет оформлен в соответствии со стандартом PSR-4, но опубликован не на packagist.org, а на github, то вместо версии пакета нужно прописать ветку и репозиторий для этого пакета:
«repositories»: [ < "type": "git", "url": "http://github.com/gears-php/framework" >], «require»: < "gears-php/framework": "dev-master", "mustangostang/spyc": "dev-master" >
Пример подключения библиотеки, которая лежит на github, но при этом не оформлена по стандарту PSR-4, а представляет из себя обыкновенное нагромождение файлов с классами и функциями:

Pqr/superlib — эта та самая «неправильная» библиотека.
В секции repositories для неё пишем такую конструкцию:
Ключевой момент: в секции autoload указываем нужные нам файлы с классами и функциями.



Соответственно, в проекте вызов getCurrentTime() будет выглядеть примерно так:
$timer = new pqr\superlib\TimerClass; echo $timer->getCurrentTime();
Версионирование
При указании допустимых версий пакетов можно использовать точное соответствие (1.2.3), диапазоны с операторами сравнения (<1.2.3), комбинации этих операторов (>1.2.3 <1.3), “последнюю доступную” (1.2.*), символ тильды (~1.2.3) и знак вставки (^1.2.3).
Указание тильды (~1.2.3) будет включать в себя все версии до 1.3 (не включительно), так как в семантическом версионировании это является моментом внедрения новых функциональных возможностей. В данном случае будет получена последняя из стабильных минорных версий, то есть будет меняться только последняя цифра — 1.2.5, 1.2.8 и т.д.
Указание знака вставки (^1.2.3) буквально означает “опасаться только критических изменений” и будет включать в себя версии вплоть до 2.0. Применительно к семантическому версионированию, изменение мажорной версии является моментом внесения в проект критических изменений, так что версии 1.3, 1.4 и 1.9 подходят, в то время как 2.0 — уже нет, то есть не меняется только первая цифра.
Тильда: ~1.2.3 — это самый распространённый и безопасный способ указания версии.
Файл composer.lock
Файл composer.lock сохраняет текущий список установленных зависимостей и их версии. Таким образом, когда версии зависимостей уже будут обновлены (команда update), другие люди, которые будут клонировать ваш проект, получат те же самые версии. Это позволяет убедиться в том, что каждый, кто получает ваш проект, имеет пакетное окружение, идентичное тому, которое вы использовали при разработке, и помогает избежать ошибок, которые могли бы возникнуть из-за обновления версий.
При каждом выполнении команды update версии обновлённый пакетов прописываются в composer.lock. Этот файл загоняется под систему контроля версий и при установке пакетов на новом сервере поставятся именно те версии пакетов, которые прописаны в этом файле. При выполнении команды install composer будет в первую очередь опираться на composer.lock. Таким образом, на разных серверах будет гарантированно установлено одинаковое пакетное окружение с точки зрения версий.
Также файл composer.lock содержит хэш файла composer.json. И если json-файл был отредактирован, то composer выдаст предупреждение, что файл lock не соответствует json-файлу.
В таком случае нужно выполнить команду composer update —lock, которая обновит composer.lock:
composer show —installed



Отличие install от update в контексте использования composer.lock
Команда composer install проверяет, существует ли composer.lock:
- если нет, резолвит зависимости и создаёт его;
- если composer.lock: существует, устанавливает версии, указанные в нём.
Команда composer update:
- проверяет composer.json;
- определяет последние версии на основе указанных в этом файле;
- устанавливает последние версии;
- обновляет composer.lock в соответствии с установленными.
Пример использования с точки зрения создателя проекта
Имеем проект без установленных пакетов:

Поставим несколько библиотек:
composer require «getjump/vk:*»

У нас сформировался composer.json с информацией о пакетах:

Мы можем его дополнить и распространять проект с этим файлом:
Другой пользователь скачал наш проект, выполнил install, и у него в проекте развернулись все нужные пакеты:

Пример использования с точки зрения создателя пакета
Для примера я создал класс с методом, который будет выводить URL текущей страницы.

Класс оформлен как пакет и залит на github.

< "name": "gsu/helperurl", "description": "Helper URL", "keywords": ["url"], "license": "MIT", "authors": [ < "name": "Sergey G.", "email": "gsu1234@mail.ru" >], «require»: < "php": ">=5.5.0″ >, «autoload»: < "psr-4": < "gsu\\helperurl\\": "src/gsu/helperurl/" >> >
Регистрируюсь на официальном репозитории и добавляю пакет, указывая ссылку на репозиторий, в котором он лежит:

Всё, пакет добавлен:


Проверяю работоспособность пакета:
