Поиск по сайту:

Как установить и использовать Composer в Ubuntu 18.04


Предыдущая версия этого руководства была написана Бренненом Бернесом.

Введение

Composer – это популярный инструмент управления зависимостями для PHP, созданный главным образом для облегчения установки и обновления зависимостей проекта. Он проверит, от каких других пакетов зависит конкретный проект, и установит их для вас, используя соответствующие версии в соответствии с требованиями проекта.

В этом руководстве вы установите Composer и начнете работу с ним в системе Ubuntu 18.04.

Предпосылки

Для выполнения этого урока вам понадобятся:

  • Один сервер Ubuntu 18.04, настроенный в соответствии с руководством по первоначальной настройке сервера Ubuntu 18.04, включая пользователя без полномочий root и брандмауэр.

Шаг 1 — Установка зависимостей

Перед загрузкой и установкой Composer убедитесь, что на вашем сервере установлены все зависимости.

Сначала обновите кеш менеджера пакетов, выполнив:

  1. sudo apt update

Теперь давайте установим зависимости. Нам понадобится curl для загрузки Composer и php-cli для его установки и запуска. Пакет php-mbstring необходим для предоставления функций для библиотеки, которую мы будем использовать. git используется Composer для загрузки зависимостей проекта, а unzip — для извлечения заархивированных пакетов. Все можно установить с помощью следующей команды:

  1. sudo apt install curl php-cli php-mbstring php-curl git unzip

Установив необходимые компоненты, мы можем установить сам Composer.

Шаг 2 — Загрузка и установка Composer

Composer предоставляет установщик, написанный на PHP. Мы загрузим его, убедимся, что он не поврежден, а затем используем его для установки Composer.

Убедитесь, что вы находитесь в своем домашнем каталоге, а затем получите установщик с помощью curl:

  1. cd ~
  2. curl -sS https://getcomposer.org/installer -o composer-setup.php

Затем убедитесь, что установщик соответствует хэшу SHA-384 для последней версии установщика, найденной на странице «Открытые ключи/подписи Composer». Скопируйте хэш с этой страницы и сохраните его как переменную оболочки:

  1. HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

Убедитесь, что вы заменили выделенное значение последним хэшем.

Теперь выполните следующий PHP-скрипт, чтобы убедиться, что скрипт установки безопасен для запуска:

  1. 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

Если вы видите, что Установщик поврежден, вам нужно повторно загрузить скрипт установки и еще раз проверить, что вы используете правильный хэш. Затем запустите команду, чтобы снова проверить программу установки. Получив проверенный установщик, вы можете продолжить.

Чтобы установить composer глобально, используйте следующую команду, которая загрузит и установит Composer как общесистемную команду с именем composer в /usr/local/bin:

  1. sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Вы увидите следующий вывод:

Output
All settings correct for using Composer Downloading... Composer (version 2.1.9) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

Чтобы проверить установку, запустите:

  1. composer

И вы увидите этот вывод, отображающий версию и аргументы Composer.

Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 2.1.9 2021-10-05 09:47:38 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. --no-cache Prevent use of the cache -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:

  1. cd ~
  2. mkdir slugify
  3. cd slugify

Теперь пришло время поискать на Packagist.org пакет, который может помочь нам сгенерировать slugs. Если вы выполните поиск по слову «slug» на Packagist, вы получите примерно такой результат:

Вы увидите два числа справа от каждого пакета в списке. Число вверху показывает, сколько раз был установлен пакет, а число внизу показывает, сколько раз пакет был отмечен звездочкой на GitHub. Вы можете изменить порядок результатов поиска на основе этих номеров (ищите два значка в правой части строки поиска). Вообще говоря, пакеты с большим количеством установок и большим количеством звезд имеют тенденцию быть более стабильными, поскольку их использует очень много людей. Также важно проверить актуальность описания пакета, чтобы убедиться, что это то, что вам нужно.

Нам нужен простой преобразователь строки в слаг. Судя по результатам поиска, пакет cocur/slugify кажется подходящим, с разумным количеством установок и звездочек. (Пакет находится немного ниже по странице, чем показано на снимке экрана.)

Пакеты на Packagist имеют имя поставщика и имя пакета. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который GitHub использует для своих репозиториев, в форме vendor/package. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugif. Вам нужно пространство имен, чтобы потребовать пакет в вашем проекте.

Теперь, когда вы точно знаете, какой пакет хотите установить, запустите composer require, чтобы включить его в качестве зависимости, а также сгенерируйте файл composer.json для проекта:

  1. composer require cocur/slugify

Вы увидите этот вывод, когда Composer загрузит зависимость:

Output
Using version ^4.0 for cocur/slugify ./composer.json has been created Running composer update cocur/slugify Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking cocur/slugify (v4.0.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Downloading cocur/slugify (v4.0.0) - Installing cocur/slugify (v4.0.0): Extracting archive Generating autoload files

Как видно из вывода, Composer автоматически решил, какую версию пакета использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: composer.json и composer.lock, а также каталог vendor:

  1. ls -l
Output
total 12 -rw-rw-r-- 1 sammy sammy 59 Oct 26 19:04 composer.json -rw-rw-r-- 1 sammy sammy 3411 Oct 26 19:04 composer.lock drwxrwxr-x 4 sammy sammy 4096 Oct 26 19:04 vendor

Файл composer.lock используется для хранения информации о том, какие версии каждого пакета установлены, и гарантирует использование одних и тех же версий, если кто-то другой клонирует ваш проект и устанавливает его зависимости. В каталоге vendor находятся зависимости проекта. Папку vendor не нужно фиксировать в системе контроля версий — вам нужно только включить файлы composer.json и composer.lock.

При установке проекта, который уже содержит файл composer.json, запустите composer install, чтобы загрузить зависимости проекта.

Давайте кратко рассмотрим ограничения версий. Если вы проверите содержимое файла composer.json, вы увидите что-то вроде этого:

  1. cat composer.json
Output
{ "require": { "cocur/slugify": "^4.0" } }

Вы могли заметить специальный символ ^ перед номером версии в composer.json. Composer поддерживает несколько различных ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость, а также сохранить стабильность вашего проекта. Оператор вставки (^), используемый автоматически сгенерированным файлом composer.json, является рекомендуемым оператором для максимальной совместимости после семантического управления версиями. В этом случае он определяет 4.0 как минимальную совместимую версию и разрешает обновления до любой будущей версии ниже 5.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 см. официальную документацию.

Далее давайте посмотрим, как автоматически загружать зависимости с помощью Composer.

Шаг 4 — Включение скрипта автозагрузки

Поскольку PHP сам по себе не загружает классы автоматически, Composer предоставляет скрипт автозагрузки, который вы можете включить в свой проект, чтобы получить автозагрузку бесплатно. Это значительно упрощает работу с вашими зависимостями.

Единственное, что вам нужно сделать, это включить файл vendor/autoload.php в ваши PHP-скрипты перед созданием экземпляра любого класса. Этот файл автоматически создается Composer при добавлении первой зависимости.

Давайте попробуем это в нашем приложении. Создайте файл test.php и откройте его в текстовом редакторе:

  1. 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!');

Сохраните файл и выйдите из редактора.

Теперь запустите скрипт:

  1. php test.php

В результате получается вывод hello-world-this-is-a-long-sentence-and-i-need-to-slug-from-it.

Зависимости нуждаются в обновлениях, когда выходят новые версии, поэтому давайте посмотрим, как с этим справиться.

Шаг 5 — Обновление зависимостей проекта

Всякий раз, когда вы хотите обновить зависимости вашего проекта до более поздних версий, выполните команду update:

  1. composer update

Это проверит наличие более новых версий библиотек, необходимых в вашем проекте. Если найдена более новая версия и она совместима с ограничением версии, определенным в файле composer.json, Composer заменит установленную предыдущую версию. Файл composer.lock будет обновлен, чтобы отразить эти изменения.

Вы также можете обновить одну или несколько конкретных библиотек, указав их следующим образом:

  1. composer update vendor/package vendor2/package2

Не забудьте проверить свои файлы composer.json и composer.lock после обновления зависимостей, чтобы другие могли установить эти более новые версии.

Заключение

Composer — мощный инструмент, который должен быть у каждого PHP-разработчика. В этом руководстве вы установили Composer и использовали его в простом проекте. Теперь вы знаете, как устанавливать и обновлять зависимости.

Помимо предоставления простого и надежного способа управления зависимостями проекта, он также устанавливает новый стандарт де-факто для совместного использования и обнаружения пакетов PHP, созданных сообществом.