Download composer latest: v1.10.10
Содержание:
- Шаг 1 — Установка зависимостей
- Composer: пакетный менеджер для PHP¶
- Файл конфигурации репозитория
- Создание и Общая Информация о composer.json
- Как работает Composer?
- Как удалить Composer
- Часть третья. Приватные модули
- Использование Скрипта Автозагрузки
- Синтаксис и опции Composer
- Основные команды Composer
- Проблемы и ограничения Composer
- Шаг 2 — Загрузка и установка Composer
- Обновление Зависимостей Вашего Проекта
- Настройка под битрикс
- Часть вторая. Установка. Самое интересное тут
- Шаг 4 — Включение скрипта автозагрузки
- Как установить Composer?
Шаг 1 — Установка зависимостей
Прежде чем приступить к загрузке и установке Composer, нужно убедиться, что на сервере установлены все зависимости.
Во-первых, необходимо обновить кэш менеджера пакетов:
Теперь мы установим зависимости. Нам потребуется , чтобы загрузить Composer, и для установки и запуска. Пакет необходим для предоставления функций для библиотеки, которую мы будем использовать. используется Composer для загрузки зависимостей проекта, а для извлечения заархивированных пакетов. Все пакеты можно установить при помощи следующей команды:
После установки всех обязательных пакетов мы можем переходить к установке Composer.
Composer: пакетный менеджер для PHP¶
В PHP для управления библиотеками используют пакетный менеджер под названием Composer. Это мощный и удобный инструмент, который позволит навсегда забыть про головную боль, связанную с поиском, установкой и разрешением зависимостей у библиотек.
Как начать работу с Composer
- Скачать Composer;
- Инициализировать его в проекте;
- Подключить файл автозагрузки в нужный сценарии;
- Установить нужную библиотеку.
Установка
Скачате Composer для Windows. Это обычный установочный файл с режимом «мастера», который проведёт вас по всему процессу установки. В конце можно будет проверить его работу, открыв командную строку. Если выполнить команду , то вы увидите длинный перечень его возможностей.
Инициализация в проекте
Продолжим работу с командной строкой. Сначала перейдём в рабочую папку проекта (если вы установили OpenServer в стандартную папку, то, например, так: ). Теперь выполним последовательно команды и . На этом инициализация закончена. Можно заметить, что в проекте появилась новая папка с именем .
Подключение сценария автозагрузки
Composer упрощает не только установку библиотек, но и их использование. Он берёт на себя подключение всех необходимых файлов классов библиотеки. За это отвечает специальный сценарий .
Сценарий — единственный файл, который необходимо подключить для использования любых библиотек.
использует механизм «автозагрузки». Он перехватывет обращение к классам библиотек и подключает все необходимые сценарии «на лету». Чтобы это всё работало подключите в вашем сценарии:
Установка библиотеки из Composer
Composer скачивает и устанавливает библиотеки по их имени. Это означает, что сначала нужно «нагуглить» нужную библиотеку, перейти на её сайт, и найти там в описании её имя. Например, название библиотеки может быть таким:
Теперь мы можем попросить composer установить библиотеку. Для этого введите команду . Composer загрузит и установит библиотеку в папку . Останется подключить установленную библиотеку в сценарии и можно её использовать.
Подключение библиотеки в сценариях
Рассмотрим подключения и использования на примере библиотеки для валидации форм — GUMP. Установим её командой: .
Теперь подключим библиотеку в сценарии, где происходит валидация формы:
Сначала мы подключаем универсальный файл автозагрузки, который отвечает за подключение классов библиотеки: .
Затем создаём новый объект валидатора и вызываем его методы для передачи правил валидации и проверки формы. На этом всё.
Файл конфигурации репозитория
Давайте представим, что мы являемся компанией с несколькими разработчиками и для наших проектов нужно только две зависимости: Symfony HttpFoundation component и Twig. Мы хотим, чтобы у нас был индивидуальный репозиторий со всеми версиями (за исключением версий разработки) этих двух пакетов и мы не должны полагаться на GitHub:
{ "name": "ServerGrove repository", "homepage": "http://149.5.47.251:8001", "repositories": [ { "type": "vcs", "url": "git@github.com:symfony/HttpFoundation.git" }, { "type": "vcs", "url": "git@github.com:twigphp/Twig.git" } ], "require-all": true, "require-dependencies": true, "archive": { "directory": "dist", "format": "tar", "skip-dev": true } }
Формат файла довольно прост, но давайте посмотрим, что каждое из полей значит:
- : имя хранилища.
- : URL репозитория.
- : содержит список репозиториев, которые мы хотим отразить.
- : скачать все пакеты, а не только те, что с тегом.
- : если значение «true», Satis автоматически разрешает и добавляет все зависимости, поэтому Composer’у не нужно будет использовать Packagist.
- : файлы будут храниться в каталоге и нам не нужно будет загружать пакеты.
Затем, мы говорим Satis создать хранилище:
$ ./bin/satis build satis.json servergrove-satis/
После этого, у нас есть новый каталог с названием , который содержит два файла: и . Первый является файлом конфигурации хранилища, который будет прочитан Composer’ом, чтобы определить, какие пакеты предлагает репозиторий. Файл — просто статический HTML файл с информацией о хранилище. Он также содержит каталог со всеми пакетами, поэтому они не будут больше загружеаться с GitHub’а.
И, наконец, мы публикуем наш репозиторий с помощью PHP-шного встроенного сервера (для реальных хранилищ рекомендуется использовать Apache или Nginx):
$ php -S localhost:8001 -t servergrove-satis/
Теперь, если мы перейдем к , мы должны увидеть что-то вроде этого:
Создание и Общая Информация о composer.json
Теперь самое интересное — использование Composer на практике, а именно в вашем PHP-проекте.
Для этого, создайте отдельный файл composer.json. Этот файл служит своего рода шпаргалкой для Composer; он будет загружать для вашего проекта только те пакеты (зависимости), которые в нём упомянуты.
Обратите внимание, что он также проверяет совместимость версий пакетов для вашего проекта. К примеру, если вы используете старый пакет в вашем проекте, файл composer.json даст вам об этом знать для избежания возможных проблем в будущем
У вас есть возможность создать и обновлять файл composer.json самостоятельно. Но так как в наших руководствах мы стараемся показать, как автоматизировать некоторые задачи, этот способ будет неуместен. Мы не рекомендуем создавать файл вручную.
Давайте продемонстрируем, насколько полезен composer.json, создав пробный проект.
Наш проект — это простой таймер PHP, позволяющий разработчикам узнать сколько времени тратиться на выполнение той или иной части кода. Это очень полезно при оптимизации и отладке.
Следуйте пошаговому руководству, чтобы создать свой проект:
- Создайте новую папку для проекта. Так как наш проект — это таймер, мы назовём его просто: «phptimer». Для этого впишите эту команду:
mkdir phptimer
- Войдите в созданную папку с помощью команды:
cd phptimer
- Теперь вам нужен пакет или библиотека с уже реализованным таймером PHP. Лучшее место для поиска пакетов — Packagist — официальное хранилище пакетов, созданных для Composer. Здесь вы найдёте все виды библиотек, которые помогут в разработке вашего проекта. Для данного руководство нам понадобиться пакет с таймером. Для этого впишите «timer» в поисковое поле, как на картинке снизу: Как видите, доступно несколько пакетов таймеров, и у каждого есть название и короткое описание того, что он делает. В этом примере мы выбираем phpunit/php-timer, так как он имеет наибольшее количество загрузок и большинство звёзд GitHub.
- Укажите нужный пакет, чтобы Composer мог добавить его в ваш проект:
composer require phpunit/php-timer
Вывод покажет версию phpunit/php-timer:
Using version ^1.0 phpunit/php-timer
Символ каретки (^) определяется Composer, как опция максимальной совместимости. Это означает, что Composer всегда будет обновлять пакет, пока не появится версия, которая каким-либо образом вызовет ошибку.
В нашем случае диапазон обновления пакета > = 1.0.9 <2.0.0, так как версия 2.0.0 нарушит обратную совместимость (англ.). Для более подробной информации о версиях Composer, перейдите на страницу документации.
После выполнения вышеуказанной команды в вашем каталоге проекта появятся два новых файла — composer.json и composer.lock, а также папка с именем vendor. Это каталог, в котором Composer будет хранить все ваши пакеты и зависимости.
Как работает Composer?
Нижеприведённая диаграмма показывает, как работает Composer при использовании Packagist в качестве центрального хранилища:
Если мы указываем, что хотим использовать различные репозитории, то Composer использует хранилище по умолчанию: Packagist. Composer запросит у Packagist информацию о всех пакетах, требуемых в файле , а также зависимостей, необходимых для этих пакетов.
Когда Composer получает всю информацию, он разрешает граф зависимостей, используя SAT solver и генерирует файл с конкретными пакетами, которые должны быть установлены для того, чтобы выполнить требования, запрашиваемые в файле . Наконец, Composer загружает эти пакеты из различных источников: GitHub, Bitbucket, PEAR или любого GIT/SVN/Mercurial репозитория.
Данная архитектура имеет несколько проблем: что произойдет, если Packagist упадет? Это не будет работать. Composer не сможет разрешить граф зависимостей. В дополнение к этой проблеме, что произойдет, если необходимые пакеты размещаются в GitHub’е, и он в настоящее время не работает? Это не будет работать. Пакеты не будут загружены, что повлияет на вашу разработку и выкладку.
Как мы можем минимизировать все эти проблемы? Добавлением резервирования. Мы можем создать наш собственный репозиторий с помощью Satis, используя это хранилище вместо (или в дополнение к) Packagist. Следующая диаграмма показывает ту же схему, но с использованием специального хранилища:
Теперь, Composer запрашивает информацию о необходимых пакетах в нашем индивидуальном хранилище и будет обращаться к Packagist только том случае, если наш репозиторий не имеет этой информации. Мы даже можем отключить Packagist и настроить наш репозиторий, чтобы все зависимости пакетов загружались в него. Кроме того, наше хранилище может загрузить пакеты и действовать в качестве reverse proxy сервера. Таким образом, мы больше не зависим от GitHub’а для загрузки пакетов.
Как удалить Composer
Composer — это файл. В большинстве случаев для удаления его достаточно просто удалить.
Если вы не помните куда был установлен Composer, то просто поищете, например, с помощью встроенной системы поиска операционной системы этот файл.
Но так удалять не всегда корректно, все зависит от того, как вы его устанавливали. Если у инструмента, с помощью которого вы его устанавливали, есть возможность и его удаление, то выполняйте это действие с помощью этого инструмента.
Например, если вы Composer устанавливали с помощью инструмента apt-get, то и используйте его для удаления этой программы.
Например, если вы устанавливали Сopmoser в Windows с помощью программы Composer-Setup.exe, то удаления программы выполняйте стандартным образом через «Приложения и возможности» (только в Windows 10) или через «Удаление или изменение программы».
Дополнительно можно удалить папку с внутренним кэшем Composer. В Linux эта папка расположена в «/home//.composer», в Windows – «C:\Users\\AppData\Roaming\Composer».
Часть третья. Приватные модули
Друзья, если во всем вышеописанном Вам не нравится, что Ваши модули будут в открытом доступе, то мы сейчас это быстро исправим. чтобы организовать приветное хранение модулей вам понадобится два инструмента:
- GitLab — это аналог GitHub который Вы можете скачать и установить на свои сервера.
- Satis — это генератор репозитория, с которым сможет работать композер.
Для начала установите GitLab и перенесите в него исходные коды Ваших модулей. после установите Satis и опишите все ваши модули в satis.json
В GitLab нужно создать токен, которому будет доступно api и указать его в satis.json. После всех этих манипуляций выполните команду:
И в папке web получите статический репозиторий, который можно опубликовать по адресу https://composer.<company_name>.ru/.
composer.json сайта будет отличатся лишь тем, что в нем будет присутствовать секция repositories
Использование Скрипта Автозагрузки
Если вы дошли до этой части руководства, все последующее вам должно даваться очень легко. Ваши зависимости были установлены и ваш проект готов к работе. Почти.
Теперь вам необходимо загрузить эти зависимости в ваш PHP-скрипт. Если бы не файл автозагрузки Composer, мы бы потратили на это довольно много времени.
Чтобы добиться автозагрузки, просто напишите следующую строку перед объявлением или созданием любых новых переменных в вашем скрипте:
require 'vendor/autoload.php'
Пример ниже поможет вам лучше это понять.
Допустим, мы хотим протестировать наш проект phptimer:
- Откройте текстовый редактор nano, чтобы создать скрипт с названием demo.php.
nano demo.php
Затем вставьте в ваш файл следующие строки:
<?php require __DIR__ . '/vendor/autoload.php' Timer::start(); // your code $time = Timer::stop(); var_dump($time); print Timer::secondsToTimeString($time);
- Запустите скрипт:
php demo.php
Терминал должен показать вывод, подобный этому:
double(1.0893424438611E-5) 0 ms
Синтаксис и опции 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. А пока давайте посмотрим, как его установить.
Основные команды Composer
Разберем основные команды Composer для начинающих.
Если вы используете «composer.phar» локально, то приведённые команды необходимо соответственно изменить в зависимости от того как настроено ваше окружение.
Например, если файл «composer.phar» находится в текущем каталоге и интерпретатор php доступен без указания пути к нему, то установка пакета будет осуществляться так:
Установка пакета
Установка пакета через Composer осуществляется посредством выполнения следующей команды:
vendor — это имя поставщика php пакета, а package — это его название.
Например, добавление в проект пакета twig через composer будет осуществляться так:
Команда require не только загрузит требуемую библиотеку в проект, но и пропишет её ещё в файле «composer.json», т.е. обновит его. Если устанавливаемый пакет зависит от других библиотек, то они также будут установлены или обновлены. Кроме этого ещё будет обновлён файл «composer.lock».
Установка всех пакетов в проект
Установка сразу всех пакетов в проект осуществляется посредством команды:
Эта команда работает следующим образом:
- проверяет, имеется ли файл «composer.lock»;
- если файл «composer.lock» существует, то устанавливает версии, указанные в нём;
- если файла «composer.lock» нет, то разрешает зависимости, описанные в файле «composer.json», создаёт файл «composer.lock» и устанавливает зависимости.
Обновление зависимостей
Команда для обновления установленных библиотек:
Эта команда обновит все зависимости установленные в проекте до последних версий (в соответствии с «composer.json») и файл «composer.lock».
Если необходимо обновить не все пакеты, а один или несколько, то их необходимо перечислить через пробел.
Команда для обновления одной библиотеки:
Удаление пакета
Команда Composer для удаления пакета из проекта:
Для удаления одновременно нескольких пакетов можете их перечислить через пробел:
Создать новый проект
Создание нового проекта из указанного пакета в текущую директорию выполняется так:
Создание нового проекта в указанную директорию выполняется так:
Получение подробной справки по команде
Вывод подробной справки по команде:
Например, вывести подробную инструкцию по использованию команды require можно следующим образом:
Проблемы и ограничения Composer
Слишком много зависимостей
Зависимости, управляемые менеджером пакетов — это великолепно. Это фантастический механизм для повторного использования существующего кода и возможности легко его обновлять. Однако вы должны следить за тем, насколько много зависимостей вы подключаете. В конце концов вы подключаете обычный код, а раз так, то он может содержать баги или быть небезопасным. Вы становитесь зависимыми от чего-то, что написал кто-то другой, над чем вы, возможно, не имеете никакого контроля, помимо того, что становитесь предметом сторонних проблем. Packagist и GitHub делают фантастическую работу по сокращению некоторых из этих рисков, но риск тем не менее всё ещё остаётся. Как произошло фиаско left-pad`а в JavaScript-сообществе — это хороший пример того, что что-то может пойти не так, и добавление пакета в зависимости может иметь последствия.
Вторая проблема с зависимостями заключается в том, что они должны быть совместимы. Это как раз работа Composer`а. Но каким бы великолепным не был Composer, есть некоторые пакеты, которые нельзя установить вместе. И чем больше зависимостей вы подключаете, тем больше шансов столкнуться с конфликтом.
TL:DR; Следите за тем, какие зависимости вы подключаете и стремитесь к наименьшему их числу.
Жесткий конфликт
Давайте рассмотрим следующий пример:
{ "require-dev": { "phpstan/phpstan": "^1.0@dev", "phpmetrics/phpmetrics": "^2.0@dev" } }
Эти два пакета — инструменты статического анализа, и они могут не установиться вместе, т.е. создать конфликт, т.к. они могут зависеть от разных и несовместимых версий PHP-парсера.
Это случай «глупых» конфликтов: конфликт должен произойти только в том случае, если вы пытаетесь подключить зависимость, которая несовместима с вашим приложением. Эти два пакета не обязательно должны быть совместимы, ваше приложение не использует их напрямую, и они не запускают код вашего приложения.
Другой пример в случае с библиотекой, для которой вы предоставляете бридж (адаптер/переходник) для Symfony и Laravel. Вы можете захотеть подключить в качестве зависимостей как Symfony, так и Laravel для тестирования этих бриджей:
{ "require-dev": { "symfony/framework-bundle": "^4.0", "laravel/framework": "~5.5.0" # небольшое напоминание о том, что # пакеты Laravel не следуют semver } }
Это может работать в некоторых случаях, но очень вероятно, что большую часть времени это будет сломано. Это немного глупо, так как очень вряд ли найдётся пользователь, которому понадобятся оба этих пакета одновременно, но даже если это было более менее правоподобно, то вряд ли вы захотите поддерживать этот сценарий.
Нетестируемые зависимости
Если вы посмотрите на следующий :
{ "require": { "symfony/yaml": "^2.8 || ^3.0" }, "require-dev": { "symfony/yaml": "^3.0" } }
Давайте взглянем что тут происходит… Единственными устанавливаемыми версиями компонента Symfony YAML (пакет ) — будут .
В приложении вам, скорее всего, всё равно. Однако, в случае с библиотекой, это может быть проблемой. Действительно, это означает, что вы никогда не сможете протестировать вашу библиотеку с .
Так или иначе, станет ли это действительно проблемой, во многом зависит от вашей конкретной ситуации. Здесь главное то, что вы знаете, что это может произойти и что нет простого способа идентифицировать такую ситуацию. Описаный выше случай достаточно простой, но если требование скрыто глубже в дереве зависимостей, например так:
{ "require": { "symfony/yaml": "^2.8 || ^3.0" }, "require-dev": { "acme/foo": "^1.0" # требует symfony/yaml ^3.0 } }
То у вас нет никакого способа, по крайней мере на данный момент, узнать об этом.
Шаг 2 — Загрузка и установка Composer
Composer предоставляет написанный на PHP установщик. Мы должны загрузить его, убедиться, что он не поврежден, а затем использовать его для установки Composer.
Убедитесь, что вы находитесь в домашней директории, а затем загрузите установщик с помощью :
Затем убедитесь, что хэш установщика совпадает с хэшем SHA-384 для последней версии установщика на странице Composer Public Keys / Signatures. Скопируйте хэш с этой страницы и сохраните его в качестве переменной командной строки:
Обязательно замените последний хэш на выделенное красным значение.
Теперь выполните следующий PHP скрипт, чтобы убедиться, что скрипт установки безопасен для запуска:
Вы должны увидеть следующий вывод:
Output
Если вы увидите , вам нужно снова загрузить скрипт установки и повторно убедиться, что вы используете правильный хэш. Запустите команду и снова проверьте установщик. После успешной проверки установщика вы можете продолжить.
Чтобы выполнить глобальную установку , используйте следующую команду, которая выполнит загрузку и установку Composer в качестве общесистемной команды в каталоге :
Вывод должен выглядеть так:
Чтобы протестировать установку, запустите команду:
Вы должны получить подобный вывод с версией и аргументами Composer.
Это значит, что менеджер зависимостей Composer был успешно установлен и доступен в рамках всей системы.
Примечание: если вы предпочитаете иметь отдельные исполняемые модули Composer для каждого проекта, который вы размещаете на этом сервере, вы можете выполнить установку локально для каждого проекта. Пользователи NPM должны быть знакомы с данным подходом. Этот метод также полезен, когда системный пользователь не имеет прав на установку программного обеспечения в рамках всей системы.
Для этого воспользуйтесь командой . В результате будет сгенерирован файл в текущей директории, который можно исполнить с помощью команды .
А теперь давайте рассмотрим использование Composer для управления
Обновление Зависимостей Вашего Проекта
Теперь нам осталось лишь узнать, как производить обновление пакетов. Сделать это можно двумя способами:
-
Универсальное обновление. Для проверки и обновления всех ваших пакетов и зависимостей, впишите в терминал следующую команду:
composer update
-
Обновление конкретного пакета. Выполните эту команду, чтобы проверить обновления для одного или нескольких определённых пакетов:
composer update vendor/package vendor2/package2
Не забудьте поменять vendor/package на имя пакета, который вы хотите обновить.
Команда update также автоматически обновит файлы composer.json и composer.lock для соответствия текущему состоянию вашего проекта.
Настройка под битрикс
Первое, что нужно сделать перед установкой — это решить где расположить папку и файлы . По этому вопросу разработчики разделяются на 3 лагеря:
- на уровне с корневой папкой проекта(т.е. на одном уровне у вас будут лежать: , , )
- в папке
- в папке
- Кто-то может расположить в корне проекта, но этот подход однозначно не правильный.
Разберем все способы по-порядку.
Первый я подглядел тут (довольно познавательное видео, рекомендую к просмотру) . Так устроен , сторонние системные файлы, модули и другие разработки подгруженные через хранятся в папке на уровне с папкой . Считаю верным решением.
Второй метод, раньше мне казался верным, но сейчас я так не считаю. Оставим эту папку для системных файлов.
Третий вариант тоже будет верным решением. Установка по этому методу рассмотрена здесь. По этому методу и я проведу установку.
Четвертый подход вызовет негодование у сторонников 2 и 3 подходов( и 1-ого тоже). «Как же так, есть папка , есть папка , а он хочет в корень засунуть? Вот чудак!».
Получается какой-то недоделанный первый метод, но в корне с неверной идеологией. Зачем папку с логикой оставлять в корне, получается совсем не структурировано.
Какой метод выбрал я?
Так как, у меня не было возможности использовать первый метод, я стал сторонником второго метода. И далее расскажу, как я внедрял в папку
Часть вторая. Установка. Самое интересное тут
Вы, точно, очень хорошо знакомы с той CMS с которой работаете, а значит знаете все тонкости установки модулей в ней. В 1С-Битрикс установка модулей проходит в 2 этапа:
- размещение исходного кода модуля в определенной директории
- Вызов функции RegisterModule(<company_name>.<mod_mame>). Как правило все действия установки модуля описываются в методе DoInstall класса, отвечающего за установку и удаления модуля.
Часть два один. Прячем пакеты в надежное место
По-умолчанию composer устанавливает все пакеты в каталог если композер размещен в корне проекта, и не выполняет никаких хуков в Ваших пакетах. Но это легко изменить.
Нам необходимо в корне проекта разместить файл composer.json:
В 1C-Битрикс код, написанный разработчиками, обычно, размещают в директории . Поэтому мы перенесли туда папку записью в секции config. Теперь все пакеты сторонних разработчиков будут размещаться там. Но наши модули необходимо размещать в директории , что-же делать?
Часть два два. Плагин установки модулей
У composer есть несколько типов пакетов, один из которых composer-plugin — это расширения для самого композера. Чтобы наши модули устанавливались так, как этого требует CMS нам нужно написать свой плагин. Для этого создаем отдельный проект и в его корне размещаем composer.json:
В этом файле есть 3 ключевых момента:
- «type»: «composer-plugin» — говорит композеру, что это плагин
- autoload — описывает правила автозагрузки классов
- extra — указывает какой класс является плагином
Плагин будет состоять из двух классов:
- непосредственно сам плагин. Он будет добавлять в composer собственный инсталлятор
- инсталлятор, который и будет заниматься установкой модулей
Плагин выполняет просто добавление инсталлятора (файл: Plugin.php)
Далее сам инсталятор (класс ). Класс должен наследоваться от и содержать следующие методы:
- supports — возвращает true если инсталлятор поддерживает данный тип пакетов
- getInstallPath — возвращает путь, по которому необходимо разместить исходный код пакета
- install/uninstall/update — хуки установки/удаления/обновления пакета
Все наши модули будут иметь тип bitrix-module и именно с ними должен работать инсталятор.
Я решил сохранить целостность имени модуля (оно состоит из company_name и mod_name разделенных точкой) и именую пакеты или . Если мы возьмем имя пакета и разобьем по слешу, то вторая часть и будет именем модуля
Методы initBitrix и getModule реализуют работу с API 1C-Битрикс для установки модуля. Метод реализуется исходя из того, какая у Вас CMS и как вы выпускаете обновления модулей и как планируете их выполнять (файл: Bitrix.php).
После того, как вы проверили работу плагина, код можно заливать на GitHub и регистрировать в Packagist.
Часть два три. Модуль
Вернемся к самому модулю, который мы упомянули в первой части. а точнее к его composer.json.
Имя модуля должно соответствовать требованиям CMS, тип должен быть указан тот, с которым работает инсталлятор (в нашем случае bitrix-module) и в зависимостях у модуля должен быть плагин (секция require). После создания самого модуля и проверки его работы заливаем его код на GitHub и регистрируем в Packagist.
Часть два четыре. использование
Напомню, что сам проект (сайт) имеет примерно следующий composer.json
теперь мы можем перечислить в секции require все необходимые нам модули или вызвать команду
В полной мере ощутить полезность проделанной работы можно, если Вам предстоит, например, добавить в проект модуль авторизации с отправкой пароля в SMS
Сам модуль содержит код, который отвечает за логику авторизации, включать в него код отправки SMS не стоит, ведь отправку SMS выполняют и другие модули, например модуль уведомлений, значит SMS лучше сделать отдельным модулем, чтобы его код не дублировать. Так же и REST сервис. Его тоже могут использовать другие модули. И при всей этой непростой схеме, когда ваш модуль тянет за собой еще четыре, его установка остаётся всё такой же простой. Просто выполните одну команду:
А что и в какой последовательности скачивать и устанавливать позвольте решить композеру.
Шаг 4 — Включение скрипта автозагрузки
Поскольку PHP не загружает классы автоматически, Composer предоставляет скрипт автозагрузки, который можно включить в ваш проект, чтобы использовать автозагрузку бесплатно. Это значительно упрощает работу с зависимостями.
Вам нужно будет только включить файл в скрипты PHP перед созданием экземпляра любого класса. Composer автоматически генерирует этот файл при добавлении первой зависимости.
Давайте попробуем сделать это в нашем приложении. Создайте файл и откройте его в текстовом редакторе:
Добавьте следующий код, который будет подключать файл , загружать зависимость и использовать ее для создания понятной человеку части URL-адреса:
test.php
Сохраните файл и закройте редактор.
Запустите скрипт:
Вы должны получить вывод .
Зависимости нуждаются в обновлениях при выходе новых версий, так что давайте рассмотрим, как решить эту проблему.
Как установить Composer?
Установка Composer может выполняться по-разному. Она также зависит от используемой среды и операционной системы. Рассмотрим различные варианты.
Установка Composer в Ubuntu, выполняющейся в подсистеме Windows для Linux (WSL)
Для установки Composer в Windows 10 на подсистему Windows для Linux (WSL) необходимо выполнить следующие команды:
Первая команда выполняет загрузку скрипта установщика с сайта «getcomposer.org». Вторая команда выполняет запуск этого установщика. В процессе своей работы установщик проверит некоторые настройки «php.ini», предупредит вас, если они установлены неправильно, а затем загрузит последний «composer.phar» в текущий каталог. Последняя или третья команда просто удалит загруженный установщик, который ранее использовался для установки Composer.
Phar — это исполняемые файлы (программы), которые выполняются посредством php интерпретатора.
Если при установке php пакетов у вас выводиться ошибки на отсутствие прав записи в каталог «~/.composer/cache», то в командной строке просто запустите данную команду:
Для установки Composer глобально, т.е. чтобы он был доступен с помощью команды необходимо дополнительно выполнить ещё следующую команду:
Эта команда переместит файл «composer.phar» из директории пользователя в директорию «/usr/local/bin» и уберёт у него расширение «phar».
Установка Composer на OpenServer (в Windows)
В OpenServer по умолчанию уже установлен Composer. Находится он в зависимости от выбранной версии PHP (устанавливается в настройках OpenServer) в директории «OSPanel\modules\PHP_*\».
Работа с Composer в OpenServer по умолчанию осуществляется в собственной консоли. Для того чтобы открыть эту консоль необходимо нажать на значок Open Server правой кнопкой мыши в области уведомлений и в открывшемся контекстном меню найти соответствующий пункт.
В консоли для проверки того, что Composer подключен, например, можно ввести команду:
Эта команда также отобразит версию Composer.
Если при выполнении этой команды отобразится сообщение, что версия Composer устарела, то её можно обновить. Осуществляется это посредством выполнения следующей команды: