Установка и использование Composer в Ubuntu 18.04
Ubuntu | Комментировать запись
Composer – это популярный менеджер зависимостей PHP, который упрощает процесс установки и обновления зависимостей проекта. Composer проверяет, от каких пакетов зависит проект, а затем устанавливает все необходимые версии пакетов в соответствии с требованиями.
Данный мануал поможет установить и начать работу с Composer на сервере Ubuntu 18.04.
Требования
Для работы вам понадобится сервер Ubuntu 18.04, предварительно настроенный по этому мануалу.
1: Установка зависимостей Composer
Прежде чем приступить к установке Composer, нужно установить все зависимости программы.
Сначала обновите индекс пакетов:
sudo apt update
Теперь установите зависимости Composer. Вам понадобятся следующие пакеты:
- curl – для загрузки Composer;
- php5-cli – для установки и запуска Composer;
- php-mbstring – зависимость библиотеки;
- git – позволяет Composer загружать зависимости проектов;
- unzip – для извлечения заархивированных пакетов.
Все эти пакеты можно установить при помощи команды:
sudo apt install curl php-cli php-mbstring git unzip
2: Загрузка и установка Composer
Composer предоставляет написанный на PHP инсталлятор. Перейдите в домашний каталог и извлеките инсталлятор при помощи curl:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
Запустите скрипт PHP, чтобы убедиться, что хэш SHA-384 пакета совпадает с хэшем инсталлятора, указанным на этой странице. Скопируйте хэш и поместите его в переменную оболочки:
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, введите:
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Эта команда загрузит пакет менеджера Composer и выполнит его глобальную установку в /usr/local/bin, после чего в системе появится общедоступная команда composer. Вывод будет выглядеть так:
All 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 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 можно установить индивидуально для каждого отдельного проекта. Локальный вариант установки особенно хорош в том случае, если пользователь не имеет права выполнять общесистемную установку программы. Чтобы установить Composer локально, загрузите пакет и проверьте его подлинность (как показано выше), а затем запустите:
php composer-setup.php
Команда сгенерирует файл composer.phar в локальном каталоге. Его можно запустить с помощью команды:
./composer.phar command
3: Использование Composer в проекте PHP
Проекты PHP часто зависят от внешних библиотек, управлять зависимостями и версиями которых бывает непросто. Composer может упростить отслеживание и установку новых версий и зависимостей.
Чтобы интегрировать Composer в свой проект, вам нужен файл 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
Теперь попробуйте найти пакет, генерирующий slug-адреса, в репозитории Packagist.org. Просто введите в поле поиска запрос slug.
Справа возле каждого результата поиска можно увидеть два счётчика. Первый показывает, сколько раз пакет был установлен; второй счётчик показывает, сколько раз пакет был отмечен на GitHub. Результат поиска можно переупорядочить согласно показателю одного из счётчиков. Конечно, пакеты с большим показателем счётчиков, как правило, более стабильны, так как они чаще используются. Также важно проверить описание пакета – действительно ли это нужный пакет?
Сейчас нам нужно найти простой конвертёр адресов. В мануале мы используем пакет cocur/slugify.
Обратите внимание: Packagist указывает имя вендора и имя пакета (vendor name и package name). Каждому пакету присваивается уникальный идентификатор, или пространство имён (в том же формате, что и для репозиториев Github: vendor/package). Необходимый пакет называется cocur/slugify. Чтобы загрузить пакет автоматически, нужно указать менеджеру зависимостей пространство имён пакета.
Итак, теперь вам известно точное имя пакета. Используйте команду composer require, чтобы добавить этот пакет в файл composer.json:
composer require cocur/slugify
Using 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
total 12
-rw-rw-r-- 1 8host 8host 59 Jul 11 16:40 composer.json
-rw-rw-r-- 1 8host 8host 2934 Jul 11 16:40 composer.lock
drwxrwxr-x 4 8host 8host 4096 Jul 11 16:40 vendor
Файл composer.lock используется для хранения данных о версиях установленных пакетов и обеспечивает использование одинаковых версий пакетов в случае клонирования проекта. Каталог vendor содержит зависимости проекта.
В случае использования контроля версий не отправляйте сообщения о коммитах каталога vendor; это применимо только для файлов composer.json и composer.lock.
Примечание: При установке проекта, который уже содержит файл composer.json, используйте следующую команду, чтобы установить зависимости проекта:
composer install
Теперь давайте посмотрим на ограничения версий. Файл composer.json содержит примерно такой код:
cat composer.json
{
"require": {
"cocur/slugify": "^3.1"
}
}
Обратите внимание на знак вставки (^) перед номером версии. Для определения версии пакета Composer может использовать несколько типов ограничений и форматов; эта функция позволяет следить за стабильностью проекта. Оператор ^ используется в файле composer.json для максимальной совместимости версий. В данном случае он определяет версию 3.1 как минимальную и разрешает обновления до версии 4.0.
В целом, вам не придётся особенно долго возиться с ограничениями версий в файле composer.json. Однако в некоторых ситуациях может потребоваться отредактировать ограничения вручную (например, если вышла новая версия библиотеки, но composer.json не разрешает обновиться до неё).
Эта таблица поможет разобраться в том, как работают ограничения версий Composer:
Ограничение | Значение |
^1.0 | >= 1.0 < 2.0 |
^1.1.0 | >= 1.1.0 < 2.0 |
~1.0 | >= 1.0 < 2.0.0 |
~1.0.0 | >= 1.0.0 < 1.1 |
1.2.1 | 1.2.1 |
1.* | >= 1.0 < 2.0 |
1.2.* | >= 1.2 < 1.3 |
Подробнее об ограничениях версий можно прочесть в документации программы.
4: Сценарий автозагрузки
Также Composer использует сценарий autoload, который можно добавить в проект для поддержки автозагрузки. Он упрощает работу с зависимостями и определяет собственные пространства имен.
Нужно просто добавить файл vendor/autoload.php в скрипты PHP перед установкой класса.
Вернёмся к тестовому приложению slugify. Создайте скрипт test.php и задайте в нём библиотеку cocur/slugify:
nano test.php
Добавьте в файл код, который запустит vendor/autoload.php, загрузит зависимость cocur/slugify и использует ее для преобразования текста.
<?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: Обновление зависимостей проекта
Чтобы обновить зависимости проекта, используйте команду:
composer update
Эта команда проверит наличие новых версий пакетов. В случае обнаружении более новой версии, которая разрешена ограничениями версий, менеджер зависимостей установит её вместо устаревшей версии данного пакета. Все изменения будут внесены в composer.lock.
Можно также обновить несколько определённых библиотек одновременно:
composer update vendor/package vendor2/package2
После обновления проверьте файлы composer.json и composer.lock.
Заключение
Composer – очень мощный инструмент, необходимый каждому разработчику PHP.
Этот менеджер зависимостей не только упрощает процесс управления зависимостями проекта, но и устанавливает новый уровень совместного использования пакетов PHP, разработанных сообществом.
Tags: Composer, PHP, Ubuntu, Ubuntu 18.04