Руководство по использованию Composer для начинающих

Руководство по использованию Composer для начинающих
Содержание:
  1. Что такое PHP Composer
  2. Как установить Composer
  3. Установка Composer на хостинг
  4. Основные команды Composer
  5. Примеры использования Composer для установки PHP фреймворков и CMS
  6. Как удалить Composer
  7. Комментарии

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

Что такое PHP Composer

Composer – это пакетный менеджер зависимостей, предназначенный для упрощения загрузки и установки сторонних php библиотек в проект. Например, с помощью него можно очень просто добавить в разрабатываемый проект php пакеты, а также развернуть другие проекты, которые распространяются вместе с файлом «composer.json».

«composer.json» - это текстовый файл, в котором в формате JSON описаны все сторонние пакеты от которых зависит данный проект.

Например, для того чтобы в некоторый разрабатываемый проект добавить сторонние библиотеки, в нём можно просто создать «composer.json» и описать в этом файле все необходимые зависимости. После этого для установки всех требуемых внешних php пакетов в проект достаточно будет ввести в консоли всего одну команду (composer install).

Другой вариант заключается в применении команды require. В этом случае самостоятельно создавать файл «composer.json» не нужно. composer require – это команда для установки php пакетов в проект посредством Composer. Кроме установки данная команда также автоматически его пропишет в файл «composer.json». В дальнейшем для того, чтобы скопировать этот проект, например на другой компьютер, вам не нужно будет переносить туда все внешние пакеты, достаточно будет переместить туда только файл «composer.json». Установка всех зависимостей на этом компьютере будет осуществляться уже посредством ввода всего одной команды (composer install).

При использовании команды require, она ещё выполняет создание файла «composer.json», если его ещё в нет проекте.

Кроме этого, Composer применяется не только для установки php библиотек. С помощью Composer осуществляется также установка различных php фреймворков (Laravel, Yii2, Symfony и др.) и CMS (Drupal, MODX 3 и др.).

Composer представляет собой обычный php скрипт, т.е. программу, написанную на языке php.

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

В качестве репозитория пакетов Composer по умолчанию использует packagist.org.

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

Загрузку сторонних библиотек Composer выполняет в папку «vendor», которую данный php скрипт создаёт в корневой директории проекта. Кроме этого, он ещё создаёт специальный файл «autoload.php», включив который в проект вы сразу же подключите к нему все ранее загруженные им библиотеки.

require "path/to/vendor/autoload.php";

Дополнительно при загрузке сторонних библиотек Composer генерирует ещё файл «composer.lock». Если «composer.json» - это главный файл Composer, в котором содержится описание основных пакетов, включая требования к их версиям, то «composer.lock» - это файл, содержащий уже не требования, а реальные версии пакетов, которые им были установлены на компьютер пользователя.

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

Например, если вы захотите скопировать проект в какое-то другое место без переноса файла «composer.lock», то выполнив в нём команду composer install, вы можете получить другие версии пакетов. Эта может случиться из-за выхода новых версий как основных пакетов, описанных в файле «composer.json», так и их зависимостей, зависимостей их зависимостей и т.д. Например, представим что выход новых версий основных пакетов не произошёл, но обновились версии у пакетов, от которых зависят основные пакеты. В результате установки работающего проекта, можем получить неработоспособный, если в какой-нибудь новой версии одного из этих пакетов была допущена ошибка. Поэтому если вы хотите сохранить полностью среду, то при копировании проекта необходимо дополнительно включать в проект файл «composer.lock».

Например, разворачивая проект на production, включающий в себя файл «composer.lock», вы получите те же версии зависимостей, которые у вас были при разработке и тестировании.

Работа с Composer осуществляется в основном в консольном или терминальном режиме, т.е. с помощью ввода команд через командную строку.

Официальный сайт Composer расположен по адресу https://getcomposer.org

Если вы использовали npm, то Сomposer – это нечто подобное, только не для «node.js», а для php.

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

Установка Composer может выполняться по-разному. Она также зависит от используемой среды и операционной системы. Рассмотрим различные варианты.

Установка Composer в Ubuntu, выполняющейся в подсистеме Windows для Linux (WSL)

Как установить локальный веб-сервер для разработки php проектов на подсистему Windows для Linux в Windows 10 можете ознакомиться в этой статье.

Для установки Composer в Windows 10 на подсистему Windows для Linux (WSL) необходимо выполнить следующие команды:

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

Первая команда выполняет загрузку скрипта установщика с сайта «getcomposer.org». Вторая команда выполняет запуск этого установщика. В процессе своей работы установщик проверит некоторые настройки «php.ini», предупредит вас, если они установлены неправильно, а затем загрузит последний «composer.phar» в текущий каталог. Последняя или третья команда просто удалит загруженный установщик, который ранее использовался для установки Composer.

Phar — это исполняемые файлы (программы), которые выполняются посредством php интерпретатора.

Если при установке php пакетов у вас выводиться ошибки на отсутствие прав записи в каталог «~/.composer/cache», то в командной строке просто запустите данную команду:

sudo chmod -R a+rw ~/.composer/cache

Для установки Composer глобально, т.е. чтобы он был доступен с помощью команды composer необходимо дополнительно выполнить ещё следующую команду:

mv composer.phar /usr/local/bin/composer

Эта команда переместит файл «composer.phar» из директории пользователя в директорию «/usr/local/bin» и уберёт у него расширение «phar».

Установка Composer на OpenServer (в Windows)

В OpenServer по умолчанию уже установлен Composer. Находится он в зависимости от выбранной версии PHP (устанавливается в настройках OpenServer) в директории «OSPanel\modules\PHP_*\».

Работа с Composer в OpenServer по умолчанию осуществляется в собственной консоли. Для того чтобы открыть эту консоль необходимо нажать на значок Open Server правой кнопкой мыши в области уведомлений и в открывшемся контекстном меню найти соответствующий пункт.

Пункт в контекстном меню OpenServer для открытия консоли

В консоли для проверки того, что Composer подключен, например, можно ввести команду:

composer
Консоль OpenServer

Эта команда также отобразит версию Composer.

Если при выполнении этой команды отобразится сообщение, что версия Composer устарела, то её можно обновить. Осуществляется это посредством выполнения следующей команды:

composer self-update

Установка Composer на хостинг

Для установки Composer на хостинг, можно просто скачать данную программу самостоятельно, а затем загрузить её в корневую директорию проекта, например, с помощью FTP.

Самостоятельная загрузка нужной версии Composer выполняется со страницы «Download». Версии программы на данной странице расположены в разделе «Manual Download».

Выполнение команд на удалённом сервере обычно осуществляют с помощью SSH. По умолчанию на shared хостингах данный сетевой протокол выключен. Для его включения необходимо найти соответствующий пункт в панели управления, открыть его и нажать в нем на кнопку «Включить SSH».

Если вы пользователь Windows 10, то клиент SSH включен в систему по умолчанию. Поэтому для выполнения команд на удаленном сервере, можно в этой версии Windows не устанавливать никакой дополнительный софт, а например, воспользоваться программой «Командная строка» или «Windows PowerShell».

Например:

ssh -l логин ip_адрес_сервера
cd public_html/blog
php7.1 composer.phar -v
Выполнение Composer команды на хостинге

Основные команды Composer

Разберем основные команды Composer для начинающих.

Если вы используете «composer.phar» локально, то приведённые команды необходимо соответственно изменить в зависимости от того как настроено ваше окружение.

Например, если файл «composer.phar» находится в текущем каталоге и интерпретатор php доступен без указания пути к нему, то установка пакета будет осуществляться так:

php composer.phar require vendor/package

Установка пакета

Установка пакета через Composer осуществляется посредством выполнения следующей команды:

composer require vendor/package

vendor — это имя поставщика php пакета, а package — это его название.

Например, добавление в проект пакета twig через composer будет осуществляться так:

composer require "twig/twig:^2.0"

Команда require не только загрузит требуемую библиотеку в проект, но и пропишет её ещё в файле «composer.json», т.е. обновит его. Если устанавливаемый пакет зависит от других библиотек, то они также будут установлены или обновлены. Кроме этого ещё будет обновлён файл «composer.lock».

Установка всех пакетов в проект

Установка сразу всех пакетов в проект осуществляется посредством команды:

composer install

Эта команда работает следующим образом:

  • проверяет, имеется ли файл «composer.lock»;
  • если файл «composer.lock» существует, то устанавливает версии, указанные в нём;
  • если файла «composer.lock» нет, то разрешает зависимости, описанные в файле «composer.json», создаёт файл «composer.lock» и устанавливает зависимости.

Обновление зависимостей

Команда для обновления установленных библиотек:

composer update

Эта команда обновит все зависимости установленные в проекте до последних версий (в соответствии с «composer.json») и файл «composer.lock».

Если необходимо обновить не все пакеты, а один или несколько, то их необходимо перечислить через пробел.

Команда для обновления одной библиотеки:

composer update vendor/package

Удаление пакета

Команда Composer для удаления пакета из проекта:

composer remove vendor/package

Для удаления одновременно нескольких пакетов можете их перечислить через пробел:

composer remove vendor/package vendor2/package2

Обновление Composer

Команда для обновления Сomposer до последней версии:

composer self-update

Обновление lock файла без обновления пакетов

Для обновления файла «composer.lock» без обновления самих пакетов:

composer update --lock

Создать новый проект

Создание нового проекта из указанного пакета в текущую директорию выполняется так:

composer create-project vendor/package

Создание нового проекта в указанную директорию выполняется так:

composer create-project vendor/package folder

Вывод всех установленных библиотек

Команда для отображения всех установленных php пакетов:

composer show

Проверка валидности файла «composer.json»

Команда с помощью которой можно проверить валидность файла «composer.json»:

composer validate

Вывод списка всех доступных команд

Вывести на экран все доступные команды Composer можно так:

composer list

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

Выполнение очистки внутреннего кэша пакетов Composer осуществляется с помощью команды:

composer clear-cache

Получение подробной справки по команде

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

composer help имя_команды

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

composer help require

Вывести зависимости для указанного пакета

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

composer depends vendor/package

Создание базового варианта файла composer.json с помощью мастера

Создание базового варианта файла composer.json с помощью мастера, т.е. посредством ответов на вопросы:

composer init

Примеры использования Composer для установки PHP фреймворков и CMS

Установка фреймворка Laravel в текущую директорию осуществляется через Composer посредством ввода следующей команды:

composer create-project --prefer-dist laravel/laravel

Установка последней версии фреймворка Yii2 через Composer:

composer create-project --prefer-dist yiisoft/yii2-app-basic

Установка разрабатываемой версии MODX Revolution 3 через Composer:

composer create-project modx/revolution www 3.x-dev

Установка через Composer нового приложения Symfony, предназначенного для создания традиционных веб-приложений:

composer create-project symfony/website-skeleton

Установка Symfony для использования его для создания микросервисов, консольных приложений или API осуществляется так:

composer create-project symfony/skeleton

Установка Drupal через Composer:

composer create-project drupal-composer/drupal-project:8.x-dev --no-interaction

Как удалить Composer

Composer — это файл. В большинстве случаев для удаления его достаточно просто удалить.

Если вы не помните куда был установлен Composer, то просто поищете, например, с помощью встроенной системы поиска операционной системы этот файл.

Но так удалять не всегда корректно, все зависит от того, как вы его устанавливали. Если у инструмента, с помощью которого вы его устанавливали, есть возможность и его удаление, то выполняйте это действие с помощью этого инструмента.

Например, если вы Composer устанавливали с помощью инструмента apt-get, то и используйте его для удаления этой программы.

sudo apt-get remove composer

Например, если вы устанавливали Сopmoser в Windows с помощью программы Composer-Setup.exe, то удаления программы выполняйте стандартным образом через "Приложения и возможности" (только в Windows 10) или через "Удаление или изменение программы".

Дополнительно можно удалить папку с внутренним кэшем Composer. В Linux эта папка расположена в «/home//.composer», в Windows – «C:\Users\\AppData\Roaming\Composer».

Комментарии: 12

Света
Света
Здравствуйте. Есть 2 сайта на хостинге beget. На двух сайтах нужны одинаковые библиотеки. Я установила на хостинг composer по инструкции beget.com/ru/kb/how-to/web-apps/instrukcziya-po-ustanovke-composer. Получилось такое расположение файлов:
/home/e/papka/.composer
/home/e/papka/sait1.ru
/home/e/papka/sait2.ru
/home/e/papka/vendor/autoload.php
/home/e/papka/composer.json
/home/e/papka/composer.lock
Мне нужно сослаться на autoload.php из файла /home/e/papka/sait1.ru/public_html/catalog/controller/product/script.php.
Я ссылаюсь require_once ' /home/e/papka/vendor/autoload.php'; мне в ответ ошибка.
Warning: require_once(/home/e/papka/vendor/autoload.php): failed to open stream: Permission denied
Как правильно сослаться на vendor/autoload.php? или установить composer на каждый сайт, чтобы пользоваться библиотеками?
Александр Мальцев
Александр Мальцев
Здравствуйте! Попробуйте на файлы выставить права 644, а на папки – 755.
Света
Света
Спасибо за ответ, но не помогло
Tomasix
Tomasix
Спасибо! У Вас лучшие статьи для изучающих веб-разработку!
Я собираю проект Bootstrap с помощью Gulp, делал по вашему уроку
Подскажите пожалуйста, если я устанавливаю компоненты PHP (например Laravel) с помощью Composer в корневую папку сайта на локальном сервере OpenServer «F:\OpenServer\domains\mysite» и в папке mysite появляется папка laravel, то
1. Что я должен переносить в папку src создаваемую Gulp «F:\OpenServer\domains\mysite\assets\src»? Или это не требуется?
2. Как настроить перенос установленных PHP компонентов в папку build «F:\OpenServer\domains\mysite\assets\build». Нужно внести изменения в gulpfile.js?
Tomasix
Tomasix
Сейчас немного разобрался — в случае именно с Laravel этот подход, наверное, не правильный. Проект под него надо создавать с самого начала и там можно и Bootstrap подключить и многое другое.
Александр Мальцев
Александр Мальцев
Да, здесь вы уже не самостоятельно собираете свой проект из модулей, а используете Laravel как основу.
Артём
Артём
Статья отличная! Спасибо большое, расписано все просто и понятно, супер!!!
Александр Мальцев
Александр Мальцев
Спасибо за отзыв!
Andrey
Andrey
Добрый день.
Очень хорошая статья, спасибо.

Есть несколько простых вопросов, ответы на которые, думаю, помогут не только мне. Буду очень рад, если вы найдете возможность ответить.

1) Я использую OpenServer на Windows10.
Composer.phar изначально уже установлен, как вы и сказали, и находится по адресу D:\OpenServer\modules\php\PHP-7-x64. Но в опенсервере есть много версий php и в каждой папке есть файл Composer.phar.
Я открываю консоль опенсервера (Дополнительно -> Консоль). Вижу, что нахожусь в папке 'd:\OpenServer'. Далее я просто ввожу слово 'composer' и нажимаю enter. В ответ выводится информация о композере, в том числе и его версия. Запускается именно та версия композера, которая находится в папке активного PHP, т.е. выбранного в настройках опенсервера (Настройки->Модули).
Пока все так, как говорится в статье, да?
Если мы скачаем установщик композера под Windows и совершим установку, выбрав php.exe из опенсервера во время установки. То какой из композеров будет запускаться по команде 'composer' в консоли опенсервера? Как можно будет запустить второй из этих композеров?

2) У меня есть проект на Drupal8. Находится он здесь: 'd:\OpenServer\domains\project'
В этой папке изначально (в Drupal из коробки) есть файлы composer.json, composer.lock и папка vendor с кучей пакетов.

Я открываю консоль опенсервера, перехожу в папку проекта 'cd d:\OpenServer\domains\project'.
Команда 'composer show' работает и выводит список пакетов.
Команда 'composer list' работает и выводит список команд композера.
А вот 'composer validate' не работает и выводит ошибку:
"Fatal error: Cannot use Composer\Plugin\Capability\CommandProvider as CommandProvider because the name is already in use in phar://D:/OpenServer/modules/php/PHP-7-x64/composer.phar/src/Composer/Plugin/PluginManager.php(195) : eval()'d code on line 10"
Такую же ошибку вызывает команда 'composer require drupal/console:~1.0', когда я пытаюсь установить пакет.

Что это значит и как исправить?

3) Далее пытаюсь установить любой пакет. Происходит такой диалог:
a) composer require
b) Search for a package: hello
c) Found 47 packages matching hello
[0] drupal/helloworld
[1] drupal/helloworld_rest
… перечисление пакетов...
Enter package # to add, or the complete package name if it is not listed: 0
d) Enter the version constraint to require (or leave blank to use the latest version):
e) Using version ^1.3 for drupal/helloworld
… предлагают установить ещё пакет, просто жмем enter ...
Search for a package:
f) … и получаем вот такой ответ: ...
./composer.json has been updated
Fatal error: Cannot use Composer\Plugin\Capability\CommandProvider as CommandProvider because the name is already in use in phar://D:/OpenServer/modules/php/PHP-7-x64/composer.phar/src/Composer/Plugin/PluginManager.php(195): eval()'d code on line 10

Смотрим папку d:\OpenServer\domains\project\vendor\drupal\ — в ней должен быть установленный пакет 'helloworld', а его там нет — ничего не установилось.

Что я делаю не так? :-)

Большое спасибо!
Александр Мальцев
Александр Мальцев
Добрый день!
Спасибо за отзыв.

Да, при запуске консоли из OpenServer, ей подставляется тот путь к php, версия которого выставлена в его настройках. Делается это через переменную окружения %path%. Именно она определяет папки, в которых консоль нужно искать файлы.
Получить значение этой переменной в консоли OpenServer можно так:
echo %path%
Если вы поменяете версию php, запустите консоль и введёте эту же команду, то увидите, что пути к каталогам php поменялись. Теперь при вызове composer она будет искать файлы уже в этих папках.

Если мы установим ещё один Composer, например под Windows, то консоль будет искать файлы также, как она и искала. Т.к. она не знает ничего о пути к папке, в которой находится этот Composer.
Под Windows Composer по устанавливается в папку:
C:\ProgramData\ComposerSetup\bin
Таким образом, чтобы консоль взяла этот файл, путь к нему должен быть прописан в %path%. Причем путь к этой директории должен быть расположен раньше, чем к папке php. Т.к. консоль прекратит поиск файла, как только он будет найден, причём просматривает она папки последовательно, так как они заданы в %path%.
Чтобы добавить этот путь вы должны открыть настройки консоли и прописать его туда.

Настройки консоли OpenServer

При установке пакетов вы всё делаете правильно.

Ошибки могут быть связаны со многими вещами.
1. Если Composer имеет версию меньше 1.9.2, то обновите его до последней:
composer self-update
2. Если после обновления при установке пакетов будут всё равно возникать ошибки, то тут необходимо будет разобраться с установленными пакетами и их зависимостями.
Илья
Илья
Спасибо за статью. Но я все таки не совсем догоняю нюансы — просьба подсказать. Я установил с помощью composer workerman (websocket server). Инсталляционная строка — composer require workerman/workerman. Процедура прошла без ошибок. И теперь я не пойму, где искать установленные файлы, а главное абсолютно не пойму, как его поместить в намеченную мною директорию. Все таки инсталляция в моем понимание это другое. Научите пожалуйста, как инсталлировать workerman в нужную директорию?
Александр Мальцев
Александр Мальцев
Вы сначала перейдите в каталог проекта, а потом уже вводите команду:
composer require workerman/workerman
Он будет загружен в папку vendor.