Вступление
https://getcomposer.org [Composer] - это популярный инструмент dependency management для PHP, созданный главным образом для облегчения установки и обновления зависимостей проекта. Он проверит, от каких других пакетов зависит конкретный проект, и установит их для вас, используя соответствующие версии в соответствии с требованиями проекта.
В этом руководстве вы установите и начнете работу с Composer в Debian 9.
Предпосылки
Для завершения этого урока вам понадобится:
-
Один сервер Debian 9, настроенный в соответствии с https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-9, руководством по первоначальной настройке сервера Debian 9], включая пользователя без полномочий root с
+ sudo +
доступ и брандмауэр.
Шаг 1 - Установка зависимостей
Перед загрузкой и установкой Composer убедитесь, что на вашем сервере установлены все зависимости.
Сначала обновите кеш менеджера пакетов, выполнив:
sudo apt update
Теперь давайте установим зависимости. Нам понадобится + curl +
для загрузки Composer и + php-cli +
для его установки и запуска. Пакет + php-mbstring +
необходим для обеспечения функций библиотеки, которую мы будем использовать. + git +
используется Composer для загрузки зависимостей проекта, а + unzip +
для извлечения сжатых пакетов. Все можно установить с помощью следующей команды:
sudo apt install curl php-cli php-mbstring git unzip
С установленными предварительными условиями мы можем установить сам Composer.
Шаг 2 - Загрузка и установка Composer
Composer предоставляет installer, написанный на PHP. Мы загрузим его, убедимся, что он не поврежден, а затем используем его для установки Composer.
Убедитесь, что вы находитесь в своем домашнем каталоге, затем извлеките установщик с помощью + curl +
:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
Затем убедитесь, что установщик соответствует хешу SHA-384 для последней версии установщика, найденной на странице [Открытые ключи / подписи Composer] [composer-sigs]. Скопируйте хеш с этой страницы и сохраните его как переменную оболочки:
HASH=
Убедитесь, что вы заменили последний хэш выделенным значением.
Теперь выполните следующий скрипт PHP, чтобы убедиться, что скрипт установки безопасен для запуска:
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Вы увидите следующий вывод.
Выход
Installer verified
Если вы видите + Installer поврежден +
, то вам нужно будет снова загрузить скрипт установки еще раз и дважды проверить, что вы используете правильный хеш. Затем выполните команду, чтобы снова проверить установщик. После того, как у вас есть проверенный установщик, вы можете продолжить.
Чтобы установить + composer +
глобально, используйте следующую команду, которая загрузит и установит Composer как общесистемную команду с именем + composer +
в + / usr / local / bin +
:
sudo php composer-setup.php --install-dir= --filename=
Вы увидите следующий вывод:
OutputAll settings correct for using Composer
Downloading...
Composer (version 1.7.2) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Чтобы проверить вашу установку, запустите:
composer
И вы увидите этот вывод, отображающий версию и аргументы Composer.
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.7.2 2018-08-16 16:57:12
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .
Это подтверждает, что Composer успешно установлен в вашей системе и доступен для всей системы.
Теперь давайте рассмотрим использование Composer для управления зависимостями.
Шаг 3 - Использование Composer в проекте PHP
Проекты PHP часто зависят от внешних библиотек, и управление этими зависимостями и их версиями может быть сложным. Composer решает эту проблему путем отслеживания ваших зависимостей и облегчения их установки другими пользователями.
Чтобы использовать Composer в своем проекте, вам понадобится файл + composer.json
. Файл + composer.json
сообщает Composer, какие зависимости необходимо загрузить для вашего проекта, и какие версии каждого пакета разрешено устанавливать. Это крайне важно для поддержания согласованности вашего проекта и избежания установки нестабильных версий, которые потенциально могут вызвать проблемы обратной совместимости.
Вам не нужно создавать этот файл вручную - при этом легко встретить синтаксические ошибки. Composer автоматически генерирует файл + composer.json
, когда вы добавляете зависимость к своему проекту с помощью команды` + required`. Вы можете добавить дополнительные зависимости таким же образом, без необходимости вручную редактировать этот файл.
Процесс использования Composer для установки пакета в качестве зависимости в проекте включает следующие шаги:
-
Определите, какая библиотека нужна приложению.
-
Исследуйте подходящую библиотеку с открытым исходным кодом на Packagist.org, официальном репозитории пакетов для Composer.
-
Выберите пакет, от которого вы хотите зависеть.
-
Запустите
+ composer require
, чтобы включить зависимость в файл` + composer.json` и установить пакет.
Давайте попробуем это с демонстрационным приложением.
Цель этого приложения - преобразовать данное предложение в строку, удобную для URL - slug. Это обычно используется для преобразования заголовков страниц в URL-пути (например, последняя часть URL-адреса для этого урока).
Давайте начнем с создания каталога для нашего проекта. Мы назовем это * slugify *:
cd ~
mkdir slugify
cd slugify
Теперь пришло время поискать пакет Packagist.org, который поможет нам создать slugs. Если вы будете искать термин «слизняк» в Packagist, вы получите результат, подобный следующему:
изображение: https: //assets.digitalocean.com/articles/composer_1404/packagist.png [Packagist Search: легкий-слаг / легкий-слаг, маффин / слаг, ддд / слаг, зеленин / слаг, вебкасл / слаг, аномалия / слаг -field_type]
Вы увидите два числа на правой стороне каждого пакета в списке. Число сверху показывает, сколько раз пакет был установлен, а число снизу показывает, сколько раз пакет был помечен на https://github.com [GitHub]. Вы можете изменить порядок результатов поиска на основе этих чисел (найдите две иконки в правой части панели поиска). Вообще говоря, пакеты с большим количеством установок и большим количеством звезд имеют тенденцию быть более стабильными, так как их использует очень много людей. Также важно проверить актуальность описания пакета, чтобы убедиться, что это именно то, что вам нужно.
Нам нужен простой конвертер строки в слаг. Судя по результатам поиска, пакет + cocur / slugify +
является хорошим совпадением с разумным количеством установок и звездочек. (Пакет немного дальше по странице, чем показано на скриншоте.)
Пакеты на Packagist имеют имя * vendor * и имя * package *. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который GitHub использует для своих репозиториев, в форме + / +
. Библиотека, которую мы хотим установить, использует пространство имен + cocur / slugif +
. Вам нужно пространство имен, чтобы запросить пакет в вашем проекте.
Теперь, когда вы точно знаете, какой пакет вы хотите установить, запустите + composer require +
, чтобы включить его в качестве зависимости, а также сгенерируйте файл + composer.json +
для проекта:
composer require cocur/slugify
Вы увидите этот вывод, когда Composer загрузит зависимость:
OutputUsing version for
has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- : Downloading (100%)
Writing lock file
Generating autoload files
Как видно из вывода, Composer автоматически определил, какую версию пакета использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: + composer.json
и` + composer.lock` и каталог + vendor
:
ls -l
Outputtotal 12
-rw-r--r-- 1 sammy sammy 59 Sep 7 16:03 composer.json
-rw-r--r-- 1 sammy sammy 2934 Sep 7 16:03 composer.lock
drwxr-xr-x 4 sammy sammy 4096 Sep 7 16:03 vendor
Файл + composer.lock +
используется для хранения информации о том, какие версии каждого пакета установлены, и обеспечения использования тех же версий, если кто-то еще клонирует ваш проект и устанавливает его зависимости. В каталоге + vendor
находятся зависимости проекта. Папка + vendor +
не требует фиксации в управлении версиями - вам нужно только включить файлы * composer.json * и * composer.lock *.
Давайте кратко рассмотрим ограничения версии. Если вы проверите содержимое файла + composer.json
, вы увидите что-то вроде этого:
cat composer.json
Output{
"require": {
"cocur/slugify": "^3.1"
}
}
Вы можете заметить специальный символ + ^ +
перед номером версии в + composer.json
. Composer поддерживает несколько различных ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и стабильность вашего проекта. Оператор вставки (+ ^ +
), используемый автоматически сгенерированным файлом + composer.json +
, является рекомендуемым оператором для максимальной совместимости, следуя semantic versioning. В этом случае он определяет * 3.1 * как минимальную совместимую версию и разрешает обновления для любой будущей версии ниже * 4.0 *.
Вообще говоря, вам не нужно вмешиваться в ограничения версии в вашем файле + composer.json
. Однако в некоторых ситуациях может потребоваться отредактировать ограничения вручную, например, когда выпущена основная новая версия необходимой библиотеки, и вы хотите обновить ее, или когда используемая вами библиотека не поддерживает семантическое управление версиями.
Вот несколько примеров, которые помогут вам лучше понять, как работают ограничения версии Composer:
Constraint | Meaning | Example Versions Allowed |
---|---|---|
^1.0 |
>= 1.0 < 2.0 |
1.0, 1.2.3, 1.9.9 |
^1.1.0 |
>= 1.1.0 < 2.0 |
1.1.0, 1.5.6, 1.9.9 |
~1.0 |
>= 1.0 < 2.0.0 |
1.0, 1.4.1, 1.9.9 |
~1.0.0 |
>= 1.0.0 < 1.1 |
1.0.0, 1.0.4, 1.0.9 |
1.2.1 |
1.2.1 |
1.2.1 |
1.* |
>= 1.0 < 2.0 |
1.0.0, 1.4.5, 1.9.9 |
1.2.* |
>= 1.2 < 1.3 |
1.2.0, 1.2.3, 1.2.9 |
Более подробное описание ограничений версии Composer см. В the официальной документации.
Далее, давайте посмотрим, как автоматически загружать зависимости с помощью Composer.
Шаг 4 - Включение скрипта автозагрузки
Поскольку сам PHP не загружает классы автоматически, Composer предоставляет скрипт автозагрузки, который вы можете включить в свой проект, чтобы получить автозагрузку бесплатно. Это значительно облегчает работу с вашими зависимостями.
Единственное, что вам нужно сделать, это включить файл + vendor / autoload.php
в ваши PHP-скрипты перед созданием любого класса. Этот файл автоматически генерируется Composer при добавлении первой зависимости.
Давайте попробуем это в нашем приложении. Создайте файл + test.php +
и откройте его в текстовом редакторе:
nano test.php
Добавьте следующий код, который приносит файл + vendor / autoload.php
, загружает зависимость` + cocur / slugify` и использует его для создания слаг:
test.php
<?php require __DIR__ . '/vendor/autoload.php';
use Cocur\Slugify\Slugify;
$slugify = new Slugify();
echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
Сохраните файл и выйдите из редактора.
Теперь запустите скрипт:
php test.php
Это приводит к выводу + hello-world-this-is-a-long-фразы-and-i-Need-to-Make-a-slug-from-it +
.
Зависимости нуждаются в обновлениях, когда выходят новые версии, поэтому давайте посмотрим, как с этим справиться.
Шаг 5 - Обновление зависимостей проекта
Всякий раз, когда вы хотите обновить зависимости вашего проекта до более поздних версий, выполните команду + update
:
composer update
Это проверит наличие новых версий библиотек, необходимых для вашего проекта. Если найдена более новая версия и она совместима с ограничением версии, определенным в файле + composer.json +
, Composer заменит предыдущую установленную версию. Файл + composer.lock +
будет обновлен, чтобы отразить эти изменения.
Вы также можете обновить одну или несколько конкретных библиотек, указав их следующим образом:
composer update
Обязательно проверьте ваши файлы + composer.json
и` + composer.lock` после того, как вы обновите свои зависимости, чтобы другие могли установить эти более новые версии.
Заключение
Composer - это мощный инструмент, который должен быть у каждого разработчика PHP. В этом руководстве вы установили Composer в Debian 9 и использовали его в простом проекте. Теперь вы знаете, как устанавливать и обновлять зависимости.
Помимо предоставления простого и надежного способа управления зависимостями проекта, он также устанавливает новый стандарт де-факто для совместного использования и обнаружения пакетов PHP, созданных сообществом.