Composer: подробная установка, принцип работы и базовые команды

Множество существующих библиотек в PHP вызывает необходимость иметь инструмент для автоматизации взаимодействия с ними. С этой задачей эффективно справляется Composer — менеджер пакетов в PHP. Он позволяет с помощью простых консольных команд устанавливать, удалять, обновлять внешние библиотеки и контролировать их зависимость от версий друг друга. В этой статье мы подробно разберем, как установить Composer, и рассмотрим его основные возможности.

Что такое Composer в PHP

Представьте, что вы разрабатываете проект и вам необходимо подключить к нему несколько сторонних библиотек. Вам нужно найти эти библиотеки, скачать и подключить их, обновлять при выходе новых версий. В свою очередь, работа одной библиотеки может зависеть от другой, и нужно следить, чтобы все зависимые библиотеки находились в проекте. Поэтому приходится тратить время на поиск, подключение и обновление зависимостей. Кроме того, следует быть внимательным с их обновлением, так как библиотека может работать корректно не со всеми версиями зависимостей.

Все эти операции успешно берет на себя Composer — менеджер зависимостей (пакетный менеджер) в PHP. Вам просто нужно установить этот инструмент и один раз его настроить. Затем с помощью консольных команд можно легко управлять зависимостями в проекте.

Основные функции пакетного менеджера, которые облегчают вам работу:

  • автоматическое скачивание и установка в проект всех библиотек (пакетов) и их зависимостей;
  • обновление пакетов до версий согласно настройкам в проекте;
  • подготовка файла для установки присутствующих в текущем проекте пакетов в другой проект (composer.lock);
  • удаление пакетов.

Далее разберем, как установить Composer, в зависимости от операционной системы, в которой происходит работа с проектом.

Установка Composer

Рассмотрим способы установки менеджера зависимостей для операционных систем Linux, MacOS и Windows.

Как установить Composer на Linux и macOS

Установка Composer на компьютеры с операционными системами Linux и MacOS идентична.

Сперва необходимо скачать файл composer-setup.php с официального сайта Composer getcomposer.org. Для этого сначала запустим консоль и перейдем в директорию с нашим проектом с помощью команды cd:

cd /path/to/project/

Затем выполним следующую команду:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

Таким образом, мы скачаем файл установки composer-setup.php в корень нашего проекта.

Далее нужно проверить, является ли установщик актуальным. Для этого надо сравнить хэш SHA-384 файла с хэшем, расположенном вверху на этой странице.

Composer checksum

На момент написания статьи хэш был следующим: «55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae». Следовательно, сравнивать будем с ним при помощи такой команды:

php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Если проверка прошла успешно, то появится сообщение «Installer verified».

Теперь мы можем запустить скачанный файл для установки Composer. Результатом операции будет загруженный файл composer.phar, который является скриптом пакетного менеджера и будет использоваться для выполнения команд.

Установка может быть локальной или глобальной. Локальная установка подразумевает, что Composer будет установлен в текущую директорию и для выполнения команд необходимо будет указывать путь к этой папке. Для установки локально, находясь в каталоге с проектом, выполним нижеследующую команду:

php composer-setup.php

При глобальной установке мы записываем composer.phar в каталог /usr/local/bin. Это позволит запускать команды менеджера зависимостей из любой точки системы:

php composer-setup.php —install-dir=/usr/local/bin

После успешной установки файл composer-setup.php больше не нужен. Поэтому его можно удалить:

php -r "unlink('composer-setup.php');"

Чтобы проверить, работает ли Composer, можно выполнить простую команду:

composer

Индикатором того, что пакетный менеджер удачно установлен и готов к работе, будет отображение его логотипа, текущей версии менеджера зависимостей, а также списка его доступных команд. Пример верхней части вывода:

Composer console logo

Если необходимо установить Composer на хостинг, нужно создать подключение по SSH и выполнить все операции, которые были описаны в этом разделе. По умолчанию SSH на хостинге может быть выключен. Чтобы его активировать, обратитесь к инструкции по вашему хостингу. Также, в зависимости от хостинга и его тарифов, пакетный менеджер может быть уже установлен на нем, и в таком случае вам не будет необходимости производить какие-либо действия по установке менеджера зависимостей.

Как установить Composer на Windows

Для локальной разработки на Windows часто используют сборки XAMPP и OpenServer.

Для установки пакетного менеджера на XAMPP можно воспользоваться следующей инструкцией:

  • скачайте файл-установщик с официального сайта менеджера зависимостей;
  • запустите этот файл — откроется окно мастера установки;
  • если мастер предложит включить режим разработчика, пропустите этот шаг;
  • далее появится окно с выбором командной строки PHP, укажите нужный путь и переходите на следующий шаг;
  • при появлении окна с установками прокси не включайте чекбокс и нажмите «Далее»;
  • в завершающем окне нажмите «Установить»;
  • после успешной установки проверьте готовность Composer: вызовите окно «Выполнить» (Win + R) и введите там команду cmd и нажмите ОК, появится командная строка, введите команду composer — должен появиться логотип менеджера зависимостей с версией и списком команд.

Если вы работаете с OpenServer, то здесь все гораздо проще — пакетный менеджер уже установлен в эту сборку. Чтобы проверить его наличие, запустите консоль, нажав правой кнопкой мыши на иконку OpenServer в виде флага внизу на панели задач, и в открывшемся контекстном меню выберите «Дополнительно» → «Консоль». В консоли введите команду composer — как отмечалось выше, должны отобразиться логотип, версия и список команд менеджера зависимостей.

Файл composer.json

После установки Composer перейдем к разбору того, как он работает. При выполнении своих задач пакетный менеджер оперирует содержимым файла composer.json, который должен находиться в корне проекта. В файле описываются все зависимости разрабатываемого проекта, то есть те пакеты, которые должны быть подключены, и их версии.

Файл composer.json можно как создавать и обновлять двумя способами:

  • вручную;
  • с помощью консольных команд.

Чтобы добавить внешние библиотеки в проект при первом способе, «руками» создается файл с именем composer и расширением json в корне проекта и описываются все зависимости. После этого в консоли выполняется следующая команда:

composer install

После запуска этой команды все зависимости, описанные в composer.json, скачиваются в проект.

Второй способ создание файла и добавления библиотек заключается в использовании консольной команды require, синтаксис которой следующий:

composer require vendor_name/package_name

# если нужно указать допустимые версии либо конкретную версию 
composer require package_name:"allowed_versions"

# vendor_name — имя поставщика пакета
# package_name — название самого пакета
# allowed_versions — допустимые версии.

Выполнив эту команду, мы получим пакет с именем package_name (и версией, удовлетворяющей условию допустимых версий allowed_versions) и все другие пакеты, от которых зависит package_name, в наш проект. При этом в случае отсутствия файла composer.json он создастся автоматически, где будет записана информация о том, что в проекте используется пакет package_name.

Примеры:

# установится точная версия пакета
composer require psr/log:2.0.0

# будет загружена последняя версия до версии 2.0.0, не включая ее (в этом случае 1.1.4)
composer require psr/log:"<2.0.0"

Скачивание пакетов происходит с официального репозитория для Composer: https://packagist.org/. Если вам необходимо найти нужную библиотеку, зайдите на этот сайт и воспользуйтесь поиском. Найдя искомый пакет, добавьте его к себе в проект с помощью команды composer require.

Допустим, мы хотим скачать библиотеку fakerphp/faker, которая используется для генерации тестовых данных. Создадим пустой каталог для нашего примера. Назовем его любым именем, например, test-faker (допустим, этот каталог находится по пути /var/www/). Перейдем в этой каталог:

cd /var/www/test-faker

Таким образом, мы попадаем в корень нашего проекта. Затем выполним команду:

composer require fakerphp/faker

Если не указывать версию пакета, то установится последняя стабильная.

После отработки команды создадутся файлы composer.json, composer.lock, а также папка vendor:

Composer require

Файл composer.json будет иметь следующее содержимое:

{
    "require": {
        "fakerphp/faker": "^1.21"
    }
}

О файле composer.lock мы поговорим дальше отдельно.

В каталоге vendor будут содержаться все загруженные пакеты (fakerphp, psr, symfony), папка composer с файлами пакетного менеджера и файл autoload.php:

Composer vendor

На текущий момент мы скачали нужный нам пакет fakerphp/faker и его зависимости. Как же использовать этот пакет в нашем проекте?

Файл autoload.php

Подключение библиотек через Composer осуществляется довольно легко. В этом нам поможет файл автозагрузки — autoload.php, который находится в корне каталога vendor.

Для демонстрации подключения создадим в корне проекта файл index.php, откроем его и пропишем в нем следующую запись:

require 'vendor/autoload.php';

Это строка подключит файл autoload.php, и функционал всех пакетов, скачанных с помощью пакетного менеджера, будет доступен в index.php. В нашем случае мы сможем работать с fakerphp/faker.

Давайте проверим работу пакета. Добавим после строки с подключением файла автозагрузки в index.php небольшой код:

// подключим файл автозагрузки
require 'vendor/autoload.php';

// создадим объект класса для генерации случайных значений
$faker = Faker\Factory::create();

// вызовем метод для генерации случайного текста и распечатаем этот текст
echo $faker->text();

Сохраним изменения и запустим файл index.php через консоль:

php index.php

В итоге получим результат в виде сгенерированного текста — библиотека работает!

Qui provident labore nemo officia rerum. Sunt doloribus aut qui reiciendis. Qui quia recusandae non quia culpa. Distinctio possimus sint enim ducimus. Ut magni cupiditate ullam tenetur neque.

Версии пакетов

Следует уделить некоторое внимание способам написания версий пакетов для загрузки с помощью Composer, чтобы менеджер пакетов «понимал», какой диапазон версий вы ожидаете от него для конкретного пакета.

Варианты указания допустимых версий:

  • конкретная версия («2.0.0») — допускается именно эта версия;
  • перечень определенных версий («1.1.3 || 1.1.4») — подходят все версии, перечисленные через логическое «или»;
  • диапазоны версий с операторами сравнения и комбинациями операторов («<2.0.0», «>1.3.0», «<=1.9.0», «>=1.0.0», «>=1.0.0 <2.0.0») — допустимые версии находятся в пределах установленных ограничений;
  • все версии, кроме указанной («!=1.1.4»);
  • шаблон для подстановки версии («2.2.*») — вместо * может быть любая цифра (в примере подходящими версиями являются все версии от 2.2.0 до 2.2.9);
  • допустимый предел повышения последней цифры версии («~2.5») — например, запись «~2.5» будет означать, что разрешается повышаться только цифре 5, то есть допустимые версии будут в диапазоне «>=2.5 <3.0.0», а для записи «~2.5.0» (повышается цифра 0) подходящие версии будут всегда меньше версии 2.6, то есть диапазон для них будет «>=2.5.0 <2.6.0»;
  • допустимый предел повышения всех цифр, кроме первой («^1.6.8») — к примеру, «^1.6.8» допускает версии в диапазоне «>=1.6.8 <2.0.0», используется обычно для выбора всех версий до следующей мажорной, не включая ее.

В нашем примере библиотека fakerphp/faker имеет следующее обозначение допустимых версий: «^1.21». То есть, подходящими в этом случае будут версии от 1.21 до 2.0.0, не включая последнюю.

Файл composer.lock

При разработке вопрос о том, как правильно переносить проект с одного сервера на другой, является одним из основополагающих. Особенно если это касается сторонних библиотек. В контексте разработки с использованием Composer для загрузки таких же внешних пакетов на другом сервере может напрашиваться логичное решение: скопировать файл composer.json с сервера-источника и запустить к консоли команду composer install.

Однако здесь появляется проблема: версии пакетов в репозитории постоянно обновляются, и другой сервер может получить пакеты, версии которых отличаются от версий пакетов на исходном сервере. Для сохранения списка всех зависимостей и их текущей версионности существует файл composer.lock.

Файл composer.lock генерируется автоматически при установке пакетов в проект. В этом файле содержится описание всех текущих зависимостей с точными версиями. Если скопировать composer.lock на другой сервер и запустить команду composer install, то скачаются пакеты с ровно такими же версиями. Таким образом, произойдет перенос абсолютно идентичного пакетного окружения, что является очень быстрым и удобным решением и избавляет от необходимости делать более сложные манипуляции, например, следить за версиями библиотек и уж тем более копировать каталог vendor.

При работе с системами контроля версиями (например, Git), чтобы переносить пакетное окружение Composer, достаточно коммитить изменения только в файлах composer.json и composer.lock. Каталог vendor в систему контроля версиями добавлять не нужно.

Базовые команды

Рассмотрим основные команды пакетного менеджера, которые могут пригодиться на практике.

Узнать текущую версию пакетного менеджера:

composer -V

# или
composer —version

Обновить Composer до последней версии:

composer self-update

Добавить новые пакеты в проект:

# один
composer require vendor_name/package_name

# несколько
composer require vendor_name1/package_name1 vendor_name2/package_name2

Установить все зависимости, описанные либо в composer.lock, либо в composer.json:

composer install

Алгоритм работы этой команды следующий:

  • если в проекте присутствует файл composer.lock, то используется его содержимое для установки точных версий пакетов;
  • в случае отсутствия composer.lock резолвятся и устанавливаются зависимости исходя из их допустимых версий в composer.json, после чего создается файл composer.lock.

Обновить все зависимости, учитывая требования в composer.json:

composer update

В этом случае также обновляется composer.lock.

Обновить конкретные пакеты поможет команда:

# один пакет
composer update  vendor_name/package_name

# несколько пакетов
composer update  vendor_name1/package_name1 vendor_name2/package_name2

Обновить файл composer.lock, не обновляя самих пакетов:

composer update —lock

Удаление пакетов происходит так:

# один пакет
composer remove vendor_name/package_name

# несколько пакетов
composer remove vendor_name1/package_name1 vendor_name2/package_name2

Чтобы создать новый проект из указанного пакета, нужно выполнить следующую команду:

# в текущем каталоге
composer create-project vendor_name/package_name

# в конкретном каталоге
composer create-project vendor_name/package_name destination_path

Composer может помочь создать базовый вариант файла composer.json. Это делается с помощью следующей команды:

composer init

После ее выполнения запуститься мастер генерации файла composer.json. Мастер будет запрашивать значения полей, предлагая при этом значения по умолчанию. По завершении работы мастера создастся composer.json.

Очистить внутренний кэш пакетов Composer:

composer clear-cache

Вывести список установленных пакетов:

composer show

Проверить на ошибки файл composer.json можно так:

composer validate

Показать зависимости определенного пакета:

composer depends vendor_name/package_name

Следующая команда отобразит все имеющиеся команды менеджера зависимостей:

composer list

Вывод справки о конкретной команде:

# например, о команде update
composer help update

В статье была рассмотрена основная информация, чтобы начать использовать такой полезный инструмент, как Composer. Если у вас остались вопросы по теме либо есть пожелания, что еще можно добавить в статью, — напишите в комментариях!

Оцените статью
DevReflex
Добавить комментарий