Tutorial
Установка и использование Composer в Ubuntu 18.04
Предыдущая версия данного обучающего руководства была написана Бренненом Бернсом.
Введение
Composer — это популярный менеджер зависимостей PHP, который упрощает процесс установки и обновления зависимостей проекта. Он проверяет, от каких прочих пакетов зависит конкретный проект, а затем устанавливает все необходимые версии пакетов в соответствии с требованиями.
Данное руководство поможет установить и начать работу с Composer на сервере Ubuntu 16.04.
Предварительные требования
Для данного обучающего руководства вам потребуется следующее:
- Один сервер Ubuntu 18.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 18.04, включая пользователя sudo без прав root и брандмауэр.
Шаг 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 предоставляет написанный на PHP установщик. Мы должны загрузить его, убедиться, что он не поврежден, а затем использовать его для установки Composer.
Убедитесь, что вы находитесь в домашней директории, а затем загрузите установщик с помощью curl
:
- cd ~
- curl -sS https://getcomposer.org/installer -o composer-setup.php
Затем убедитесь, что хэш установщика совпадает с хэшем SHA-384 для последней версии установщика на странице Composer Public Keys / Signatures. Скопируйте хэш с этой страницы и сохраните его в качестве переменной командной строки:
- HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061
Обязательно замените последний хэш на выделенное красным значение.
Теперь выполните следующий 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 corrupt
, вам нужно снова загрузить скрипт установки и повторно убедиться, что вы используете правильный хэш. Запустите команду и снова проверьте установщик. После успешной проверки установщика вы можете продолжить.
Чтобы выполнить глобальную установку composer
, используйте следующую команду, которая выполнит загрузку и установку Composer в качестве общесистемной команды composer
в каталоге /usr/local/bin
:
- sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Вывод должен выглядеть так:
OutputAll settings correct for using Composer
Downloading...
Composer (version 1.6.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Чтобы протестировать установку, запустите команду:
- composer
Вы должны получить подобный вывод с версией и аргументами Composer.
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.6.5 2018-05-04 11:44:59
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 для каждого проекта, который вы размещаете на этом сервере, вы можете выполнить установку локально для каждого проекта. Пользователи NPM должны быть знакомы с данным подходом. Этот метод также полезен, когда системный пользователь не имеет прав на установку программного обеспечения в рамках всей системы.
Для этого воспользуйтесь командой php composer-setup.php
. В результате будет сгенерирован файл composer.phar
в текущей директории, который можно исполнить с помощью команды ./composer.phar
.
А теперь давайте рассмотрим использование Composer для управления
Шаг 3 — Использование Composer в PHP проекте
PHP проекты часто зависят от внешних библиотек, и управление этими зависимостями и их версиями может вызывать затруднения. Composer решает эту проблему, отслеживая ваши зависимости и упрощая для других установку этих зависимостей.
Чтобы использовать Composer в вашем проекте, вам потребуется файл composer.json
. Файл composer.json
указывает Composer, какие зависимости для вашего проекта нужно загрузить, а также какие версии каждого пакета можно использовать. Это очень важно для сохранения последовательности вашего проекта и отказа от установки нестабильных версий, которые могут вызывать проблемы с обратной совместимостью.
Вам не нужно создавать этот файл вручную, потому что вы можете легко допустить ошибку в синтаксисе. Composer автоматически генерирует файл composer.json
, когда вы добавляете в ваш проект зависимость с помощью команды require
. Вы можете добавлять дополнительные зависимости таким же образом без необходимости вручную изменять файл.
Использование Composer для установки пакета в качестве зависимости в проект подразумевает следующие шаги:
- Определите, какая библиотека необходима приложению.
- Изучите подходящую библиотеку из открытого источника на Packagist.org, официальном репозитории пакетов для Composer.
- Выберите пакет, который вы будете использовать в качестве зависимости.
- Запустите
composer require
, чтобы включить зависимость в файлcomposer.json
и установить пакет.
Давайте попробуем сделать это на примере демо-приложения.
Приложение преобразует указанное предложение в понятную человеку часть URL-адреса (slug). Как правило, подобные приложения используются для преобразования названия страницы в URL-адрес (например, последняя часть URL для данного обучающего руководства).
Начнем с создания директории для нашего проекта. Мы назовем его slugify.
- cd ~
- mkdir slugify
- cd slugify
Теперь нужно найти на Packagist.org пакет, который поможет нам генерировать понятные человеку части URL-адреса. При поиске термина «slug» на Packagist вы получите примерно такой результат:
Вы увидите два числа с правой стороны каждого пакета в списке. Число сверху указывает на количество установок пакета, а число внизу показывает, какие оценки пакету ставили на GitHub. Вы можете изменить порядок результатов поиска на основе этих чисел (посмотрите на два значка с правой стороны панели поиска). Как правило, пакеты с большим количеством установок и большим количеством звезд более стабильны, потому что многие люди их используют. Также важно проверить описание пакета на соответствие тому, что вам нужно.
Нам нужен простой конвертер из строки в понятную человеку часть URL-адреса. Судя по результатам поиска пакет cocur/slugify
кажется наиболее подходящим вариантом с большим количеством установок и звезд (Пакет расположен ниже в результатах поиска, чем видно на скриншоте).
Пакеты на Packagist имеют имя автора и имя пакета. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который использует GitHub для своих репозиториев в форме автор/пакет
. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugif
. Вам нужно пространство имен, чтобы использовать пакет в вашем проекте.
Теперь, когда вы знаете, какой пакет хотите установить, запустите composer require
, чтобы использовать его в качестве зависимости, а также сгенерировать файл composer.json
для проекта:
- composer require cocur/slugify
Вы увидите следующий вывод, когда Composer загрузит зависимость:
OutputUsing version ^3.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v3.1): Downloading (100%)
Writing lock file
Generating autoload files
Как видите, Composer автоматически определил, какую версию пакета использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: composer.json
и composer.lock
, а также каталог vendor
.
- ls -l
Outputtotal 12
-rw-rw-r-- 1 sammy sammy 59 Jul 11 16:40 composer.json
-rw-rw-r-- 1 sammy sammy 2934 Jul 11 16:40 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Jul 11 16:40 vendor
Файл composer.lock
используется для хранения информации о том, какие версии каждого пакета установлены, а также для использования одних и тех же версий пакетов, если кто-либо будет клонировать ваш проект и устанавливать зависимости. Каталог vendor
служит местом расположения зависимостей проекта. Папка vendor
не обязательно будет использоваться для контроля версий, вы должны поместить туда только файлы composer.json и composer.lock.
При установке проекта, который уже содержит файл composer.json
, запустите composer install
, чтобы загрузить зависимости проекта.
Давайте быстро пробежимся по ограничениям версии. Если вы просмотрите содержимое файла composer.json
, то увидите следующее:
- cat composer.json
Output{
"require": {
"cocur/slugify": "^3.1"
}
}
sam
Вы можете заметить специальный символ ^
перед номером версии в файле composer.json
. Composer поддерживает несколько ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и одновременно сохранить стабильность вашего проекта. Оператор карет (^
), используемый в автоматически генерируемом файле composer.json
, рекомендуется применять для обеспечения максимальной совместимости в соответствии с семантическим управлением версиями. В данном случае он определяет 3.1 в качестве минимальной совместимой версии и позволяет обновляться до любой будущей версии ниже 4.0.
Как правило, вам не нужно изменять ограничения версии в файле composer.json
. Однако в некоторых ситуациях может потребоваться вручную отредактировать ограничения для экземпляра, например, при выходе крупного обновления требуемой библиотеки, а также в случае, когда библиотека, которую вы хотите использовать, не соответствует требованиям семантического управления версиями.
Ниже представлены примеры, которые помогут лучше понять, как работают ограничения версии в Composer:
Ограничение | Значение | Пример допустимых версий |
---|---|---|
^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 см. в официальной документации.
Теперь нужно рассмотреть, как автоматически загружать зависимости с помощью Composer.
Шаг 4 — Включение скрипта автозагрузки
Поскольку PHP не загружает классы автоматически, Composer предоставляет скрипт автозагрузки, который можно включить в ваш проект, чтобы использовать автозагрузку бесплатно. Это значительно упрощает работу с зависимостями.
Вам нужно будет только включить файл vendor/autoload.php
в скрипты PHP перед созданием экземпляра любого класса. Composer автоматически генерирует этот файл при добавлении первой зависимости.
Давайте попробуем сделать это в нашем приложении. Создайте файл test.php
и откройте его в текстовом редакторе:
- nano test.php
Добавьте следующий код, который будет подключать файл vendor/autoload.php
, загружать зависимость cocur/slugify
и использовать ее для создания понятной человеку части URL-адреса:
<?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-sentence-and-i-need-to-make-a-slug-from-it
.
Зависимости нуждаются в обновлениях при выходе новых версий, так что давайте рассмотрим, как решить эту проблему.
Шаг 5 — Обновление зависимостей проекта
Если вам нужно обновить зависимости проекта на более поздние версии, запустите команду update
:
- composer update
Она будет проверять новые версии библиотек, которые требуются вам в вашем проекте. Если будет найдена новая версия, которая совместима с ограничением версии, определенным в файле composer.json
, Composer заменит ранее установленную версию на новую. Файл composer.lock
будет обновлен, чтобы отразить эти изменения.
Вы также можете обновить одну или несколько конкретных библиотек, указав их следующим образом:
- composer update vendor/package vendor2/package2
Обязательно проверьте файлы composer.json
и composer.lock
после обновления зависимостей, чтобы другие тоже могли установить обновленные версии.
Заключение
Composer — это мощный инструмент, который должен быть в арсенале каждого разработчика PHP. В этом обучающем руководстве вы установили Composer и использовали его при создании простого проекта. Теперь вы умеете устанавливать и обновлять зависимости.
Помимо обеспечения удобного и надежного способа управления зависимостями проекта, этот инструмент задает новый стандарт для обмена и обнаружения пакетов PHP, созданных сообществом.