Что такое composer php
Освоение Composer: советы и приемы использования
Предлагаю читателям «Хабрахабра» перевод статьи «Mastering Composer – Tips and Tricks» за авторством Bruno Skvorc.
Composer произвел революцию в управлении пакетами в PHP и помог разработчикам по всему миру создавать независимый от фреймворков и разделяемый код. Но все же мало кто выходит за рамки основ его функционала, так что данная статья постарается осветить некоторые полезные приемы его использования.
Глобальная установка (Global)
Несмотря на то, что данная опция доступно описана в документации, Composer может (а в большинстве случаев должен) быть установлен глобально. Глобальная установка означает, что вместо:
Вы можете в любом проекте просто ввести:
Это позволяет очень просто создавать новые проекты (например, с помощью команды create-project) в любом месте вашей файловой системы.
Для установки Composer глобально, следуйте этим инструкциям.
Правильная установка зависимостей
Just add the following to your composer.json file:
Но данный подход имеет несколько недостатков. Во-первых, простой копипаст может привести к возникновению ошибок. Во-вторых, для новичка может быть не очевидно, где разместить данный код, если у него и так уже имеется обширный файл composer.json, и это также привести к ошибке. Наконец, некоторые люди будут иметь дело с Composer впервые, а возможно и впервые столкнутся с командной строкой. Поэтому хорошей практикой будет освещение всевозможных случаев, в которых новички могут чувствовать себя неуверенно (есть ли у них графический редактор или они будут использовать командную строку? Если второе, установлен ли в ней текстовый редактор, и если да, то какой? Объясняете ли вы саму процедуру редактирования файла? А что если файла composer.json ещё не существует в проекте? Описываете ли также принцип создания нового файла?).
Наилучший способ добавить новую зависимость в файл composer.json — это воспользоваться командой require:
Это добавит все необходимое в файл зависимостей, минуя ручное вмешательство.
Если вам нужно добавить пакеты в раздел require-dev, добавьте в команду опцию —dev:
Также, команда require поддерживает добавление нескольких пакетов одновременно, для этого просто разделите их пробелом.
Файлы блокировок
Файл composer.lock сохраняет текущий список установленных зависимостей и их версии. Таким образом, на момент, когда версии зависимостей уже будут обновлены, другие люди, которые будут клонировать ваш проект, получат те же самые версии. Это позволяет убедиться в том, что каждый, кто получает ваш проект, имеет “пакетное окружение”, идентичное тому, которое вы использовали при разработке, и помогает избежать ошибок, которые могли бы возникнуть из-за обновления версий.
Файл composer.lock почти всегда должен быть добавлен в систему контроля версий (не всегда).
Версионирование
Репетиции (Dry Runs)
Чтобы просто посмотреть, пройдет ли установка новых зависимостей успешно, вы можете использовать параметр —dry-run для команд install и update. Composer в данном случае выведет все потенциальные проблемы без непосредственного выполнения самой команды. Никаких реальных изменений в проекте не произойдет. Этот прием отлично подходит для тестирования сложных зависимостей и настройки изменений перед реальным их внесением.
Создание проекта
Последнее, но не менее важное, что мы должны упомянуть — это команда create-project.
Команда создания проекта принимает в качестве аргумента имя пакета, который она затем клонирует и выполняет composer install внутри него. Это отлично подходит для инициализации проектов — не нужно больше искать Url нужного пакета на GitHub, клонировать его, самому переходить в папку и выполнять команду install.
Крупные проекты, такие как Symfony и Laravel, уже используют данный подход для инициализации своих «skeleton» приложений, и многие другие также присоединяются.
Например, в Laravel это используется следующим образом:
В команду create-project можно передать еще два параметра: путь, в который нужно установить проект (если не указан, используется имя пакета), и версия (будет использована последняя, если не указать).
Composer: пакетный менеджер для PHP
Пакетный менеджер — это программа для поиска и установки библиотек по их названию.
Пакетный менеджер избавляет от необходимости самостоятельно искать библиотеки, скачивать, распаковывать, разрешать зависимости — все эти задачи он берёт на себя.
Что умеет пакетный менеджер?
Composer: пакетный менеджер для PHP
В PHP для управления библиотеками используют пакетный менеджер под названием Composer. Это мощный и удобный инструмент, который позволит навсегда забыть про головную боль, связанную с поиском, установкой и разрешением зависимостей у библиотек.
Как начать работу с Composer
Установка
Инициализация в проекте
Подключение сценария автозагрузки
autoload.php использует механизм «автозагрузки». Он перехватывет обращение к классам библиотек и подключает все необходимые сценарии «на лету». Чтобы это всё работало подключите autoload.php в вашем сценарии:
Установка библиотеки из Composer
Composer скачивает и устанавливает библиотеки по их имени. Это означает, что сначала нужно «нагуглить» нужную библиотеку, перейти на её сайт, и найти там в описании её имя. Например, название библиотеки может быть таким: fzaninotto/faker
Подключение библиотеки в сценариях
Затем создаём новый объект валидатора и вызываем его методы для передачи правил валидации и проверки формы. На этом всё.
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
Далее нас будет интересовать переменная path:
Вписываем путь к интерпретатору
*С давних времён у меня на компьютере лежит сборка xampp, сама сборка здесь нафиг не нужна, а вот интерпретатор с неё вполне подойдёт (версия PHP – 5.6).
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 локально
Отличия глобальной и локальной установки
Команды запускаются по разному при локальной и глобальной установках:
Например:
Локально: php composer.phar require silex/silex
1.1
Глобально: composer require silex/silex
При глобальной установке этот файл не нужен. Composer запускается при любой текущей директории.
Команды
Синтаксис composer.json
Именование пакетов и варианты описания пакетов
Имя пакета состоит из двух частей разделёных косой чертой: названия поставщика (vendor name) и названия библиотеки.
Если пакет оформлен в соответствии со стандартом PSR-4, но опубликован не на packagist.org, а на github, то вместо версии пакета нужно прописать ветку и репозиторий для этого пакета:
Пример подключения библиотеки, которая лежит на github, но при этом не оформлена по стандарту PSR-4, а представляет из себя обыкновенное нагромождение файлов с классами и функциями.
Pqr/superlib — эта та самая «неправильная» библиотека.
В секции repositories для неё пишем такую конструкцию
Ключевой момент — секция autoload, здесь указываем нужные нам файлы с классами и функциями.
Структура библиотеки:
Поделиться
doctor Brain
мир глазами веб-разработчика
Современный PHP разработчик (composer)
Пакетный менеджер composer
время чтения 10 мин.
Содержание
Пакетный менеджер
Обычно, функционально завершенный блок кода формирует метод, группа методов объединяется в составе определенного класса, набор классов составляет пакет.
Повторно используемые пакеты, в свою очередь, являются частью различных проектов, и не подвергаются, при этом, модификации. Такие пакеты позовляют решать строго опредленные задачи, обеспечивая взаимодействие с клиентом через API.
Использование пакетов способствует соблюдению современных принципов разработки программного обеспечения, например, DRY: “Don’t Repeat Yourself”, значительно уменьшая количество дублирующейся информации всех видов.
В большинстве случаев, у пакетов есть зависимости. Когда для работы “Пакета A” требуется “Пакет B”, мы говорим, что “Пакет A” зависит от “Пакета B”. Довольно часто для пакета формируется цепь таких зависимостей (“Пакет A” зависит от “Пакета B”, “Пакет B” зависит от “Пакета C”, список можно продолжить).
Представьте, что пакетных менеджеров не существует. Какие действия необходимо осуществить, для того чтобы обеспечить работоспособность “Пакета A”, зависящего от “Пакета B”? Для начала мы скачаем исходный код “Пакета A”, после чего обнаружим, что его функциональность зависит от “Пакета B”. Поэтому мы приложим максимум усилий, для того чтобы найти исходный код “Пакета B”. Но такой алгоритм может и не сработать, потому что мы не уверены, что в результате скачивания получим нужную версию “Пакета B”. Эту историю можно продолжить, а она касается только одной зависимости. Представляете, каким кошмаром обернется наличие у необходимого пакета множественных зависимостей или их цепочки.
Composer vs. PEAR
Кое-что с названием PEAR было еще до появляения Composer. Разработчики PHP с многолетним стажем наверняка знакомы с PEAR. Этот продукт сущестует с 1999 года. PEAR, как и Composer, был создан с целью развития инфраструктуры повторного использования пакетов. Тем не менее, по ряду причин он был отвергнут сообществом разработчиков:
Composer
Экосистема Composer содержит две части:
Пакетный менеджер уровня приложений управляет зависимостями только в пределах проекта. Это значительно облегчает управление проектами и предохраняет рабочее место от хранения большого количества ненужных файлов. Все необходимые пакеты хранятся в директории конкретного проекта.
Каждый разработчик может выкладывать свои пакеты в Packagist. В отличие от PEAR, нет необходимости набирать какие-то голоса. Тем не менее, популярность вашего проекта определяется собранными звездами.
Packagist
Установка Composer
Существуют два варианта установки Composer: локальный и глобальный. Исходя из профессионального опыта, мы рекомедуем выбрать глобальную установку: скорее всего Вы будете использовать Composer для управления зависимостями во всех своих PHP-проектах. Глобальная установка избавляет от большого количества ненужных хлопот в перспективе.
Composer предлагает удобный установщик, который запускается из командной строки, актуальную версию можно взять здесь (в связи с тем, что инсталяционный код меняется по мере выхода новых версий продукта, нет смысла выкладывать его в этой статье).
MacOS/Linux/Unix
Windows
Достаточно скачать и запустить установщик для Windows.
Актуальную информацию о глобальном и локальном вариантах установке Composer в различных операционных системах можно узнать здесь.
Проверка установки
Если результат будет подобен этому, установка выполнена верно:
Работа с Composer
Теперь Composer готов к работе. Рассмотрим небольшой пример:
Допустим, мы завершили работу над проектом, но для демонстрации его возможностей клиенту нужно сгенерировать пул даных: имена и адреса пользователей. Конечно, есть желание, чтобы такие данные выбирались случайным образом и, вообще, были максимально похожи на реальные. Одно из решений: самостоятельно создать массив имен и адресов, а затем случайным образом выбирать из него значения с помощью функции array_rand(). Надеюсь, Вы понимаете, что это непрактичное и скучное решение. А что делать, если нам понадобятся сотни пользовательских данных? Нужно найти альтернативное решение.
Давайте установим Faker с помощью Composer.
Из корневой директории проекта выполним команду:
Для установки пакета потребуется всего лишь несколько секунд. За это время Composer скачает zip-архив Faker с GitHub и создаст несколько внутренних файлов и папок.
После установки пакета в директории проекта можно обнаружить новые папки и файлы:
composer.json
Этот файл описывает зависимости в проекте. Это просто JSON-файл, демонстрирующий установленные для данного проекта пакеты.
Рассмотрим три основные команды Composer:
composer require
В случае, когда при выполнении команды composer require не указана необходимая версия пакета, происходит скачивание последней доступной версии.
В этом случае произойдет не только скачивание пакета установленной версии, но и корректное обновление соответствующих файлов Composer.
composer install
Возникает вопрос: в чем различия?
Эта команда обычно используется в 3 случаях:
composer update
composer update никогда нельзя использовать на продакшене
Как избежать такой ситуации? Рекомендации просты:
Соблюдение этих нехитрых условий позволит вам быть уверенными в полном соответствии переносимых пакетов.
composer.lock
В то время, как composer.json определяет состав пакетов, необходимых для проекта, и накладывает ограничения на используемые версии пакетов, composer.lock определяет точные версии пакетов, установленных в проекте. Иными словами composer.lock сохраняет текущее состояние проекта. Это очень важный момент, который необходимо знать.
Рассмотрим следующую ситуацию. Случайно из проекта удалили папку vendor со всеми установленными пакетами. Что делать? Достаточно запустить команду composer install и будут установлены все необходимые версии пакетов, используемых в проекте.
Это зависит от весьма простых условий:
Composer дает определенные свободы в использовании своих команд. Но существует несколько правил, которые лучше соблюдать, чтобы избежать неприятные ситуации:
Автозагрузка
В нашем случае, для использования возможностей пакета Fake, достаточно просто подключить автозагрузчик:
после этого Faker готов к работе:
Сообщество
Итак, Вы получили достатчные знания о менеджере зависимостей Composer. Приступайте к его использованию в своих проектах. Можно гарантировать, что это значительно облегчит Вашу работу, как личную, так и в составе команды. Не забывайте обращаться к Packagist, перед тем как приступить к созданию собственного функционала. Используйте все возможности сообщества.
Применение и использование Composer для PHP
В настоящее время при разработки современных приложений используют пакетные менеджеры для управления зависимостями. При разработке на PHP используют Composer. Если вы PHP-разработчик то вы либо уже используете Composer, либо уже что-то слышали о нём. А если не слышали, то вам будет интересно и полезно прочитать данную статью. В статье будут показаны практические примеры с приложенными скриншотами и листингом кода.
Пакетные менеджеры упрощают установку и обновление сторонних библиотек, от которых зависит ваш проект. Они позволяют установить и подключить стороннюю библиотеку одной командой в консоли, после чего вы сразу же сможете использовать библиотеку (набор классов) в своем коде.
Composer — это пакетный менеджер, который предоставляет средства по управлению зависимостями и управлением автозагрузкой в PHP-приложении. Пакеты устанавливаются внутрь вашего проекта и доступны только в нём.
Установка Composer
Официальная страница, на которой вы можете найти информацию по установке Composer, находится здесь. Однако, если вы используете ОС на базе GNU/Linux, то проще всего установить Composer с помощью пакетного менеджера вашей операционной системы. Например для Ubuntu:
sudo apt install composer
Для Windows-пользователей придется воспользоваться инструкцией, ссылка на которую была дана выше.
Использование Composer
Если вы хотите использовать сторонние библиотеки, то при создании проекта на PHP или в уже готовом проекте вам необходимо инициализировать Composer для данного проекта. Инициализация всего лишь предполагает создание файла composer.json в корне вашего проекта с нужными вам параметрами. Проще всего это сделать в автоматизированном режиме командой composer init находясь в корневой директории вашего проекта
composer init
Далее вы перейдёте в интерактивный режим генерации package.json, в котором система вам задаст несколько следующих вопросов:
Package name — название вашего проекта(пакета). Обычно пишется в формате /
, где vendor — название организации или разработчика, а package — название проекта или библиотеки.
Description — описание приложения.
Author — автор проекта. Обычно предлагает по умолчанию ваши данные из Git. примерный формат Nikolay Sergeychuk
Далее задаст еще несколько вопросов, которые тоже можно просто пропустить, и предоставит листинг готового package.json.
Для примера я создам директорию для проекта и первым делом инициализирую в нём Composer
Пример инициализации Composer
Теперь в проекте есть файл package.json, в который мы можем добавлять списо зависимостей.
Зависимости бывают двух типов: обычные и девелоперские.
Обычные зависимости — это зависимости, которые будут использоваться в исходном коде проекта и необходимы для его работы. К нип относятся различные подключаемые и используемые библиотеки.
Девелоперские зависимости — зависимости, которые нужны лишь на этапе написания кода и не нужны в продакшене. Например библиотеки для тестирования, на продакшене они совсем необязательны.
Для добавления зависимости к проекту можно использовать команду следующего вида
composer require somepackage/somepackage:someversion
Например нам необходимо в проекте сгенерировать файл для Excel, для этого нам нужно было бы разобраться как устроены такие файлы и написать код, который будет создавать такой файл — это всё очень долго. С Composer мы можем просто найти готовую билбиотеку, подключить её и использовать удобный API для создания таких файлов.
Давайте подключим такую библиотеку, для примера возмём PHPExcel. Найти библиотеки можно на сайте https://packagist.org/
composer require PHPOffice/PHPExcel
После чего Composer скачает данную библиотеку и пропишет зависимость в package.json
Установка пакета в Composer
Содержимое package.json изменилось, а в корне проекта появилась директория vendor с файлами установленной библиотеки. При переносе исходного кода, например при использовании системы контроля версий (Git etc.), совсем необязательно тянуть с собой директорию vendor. Достаточно переностить проект без нее, а затем выполнять composer install в корне проекта. Composer скачает и установит пакеты, прописанные в package.json
Если вы хотите обновить ваши пакеты до совместимых версий выше, то используйте команду composer update
Использование подключенных пакетов
Для использования установленных Composer’ом библиотек, необходимо добавить автозагрузку. В современных приложениях используется паттерн front controller, он позволяет иметь единую точку доступа в приложение. То есть все запросы к приложению заходят в него, а он определяет каким контроллером должен формироваться респонс. Если в вашем приложении такого нет, то страшного нет ничего, вам просто придётся подключать файл автозагрузки во всех местах, где вы собираетесь использовать установленные библиотеки.
Например, у меня приложение состоит из одного файла — index.php, автозагрузку мне необходимо написать в нём.
index.php с подключенной автозагрузкой выглядит следующим образом
Всё, везде ниже можно теперь использовать подключенные библиотеки.
Давайте воспользуемся установленной библиотекой и напишем приложение, которое сгенерирует файл для Excel с записю Hello, world! в первой ячейке.
Вдаваться в подробни как работать с PHPExcel не будем, т.к. это уже было описано в статье использование PHPExcel библиотеки, поэтому сразу приведу код файла index.php
Как видите, в коде мы используем классы, предоставленные библиотекой PHPExcel.
Запустим скрипт командой
php index.php
Он отработает и создаст файл Hello.xls, открыв который, можно обнаружить следующее
Composer значительно упрощает разработку, вам нет необходимости скачивать откуда-то готовые библиотеки и скрипты, а затем подключать их с помощью include. Composer всё делает за вас сам. При этом, при переносе кода вашего проекта, вам не нужно тянуть готовые библиотеки, вы можете перенести только свой код, а затем просто установить эти библиотеки с помощью Composer.
Надеюсь статья оказалась вам полезной и вы узнали о Composer и теперь облегчите себе жизнь, применяя его.