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

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


Введение

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

В этом руководстве объясняется, как установить и начать работу с Composer в системе Ubuntu 16.04.

Предпосылки

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

  • Система под управлением Ubuntu 16.04
  • Доступ к серверу в качестве обычного пользователя с разрешением sudo

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

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

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

  1. sudo apt-get update

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

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

Теперь вы можете перейти к следующему шагу.

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

Composer предоставляет установщик, написанный на PHP. Убедитесь, что вы находитесь в своем домашнем каталоге, и получите установщик с помощью curl:

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

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

  1. php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified

Чтобы установить composer глобально, используйте следующее:

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

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

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

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

  1. composer

И вы должны получить вывод, подобный этому:

Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.1.1 2016-05-17 12:25:44 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. . . .

Это означает, что Composer был успешно установлен в вашей системе.

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

В этом случае установка может быть выполнена после загрузки и проверки сценария установки, как указано выше, например так:

  1. php composer-setup.php

Это создаст файл composer.phar в вашем текущем каталоге, который можно запустить с помощью ./composer.phar команды.

Шаг 3 — Создание файла composer.json

Чтобы использовать 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

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

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

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

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

Требование пакета

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

  1. composer require cocur/slugify
Output
Using version ^2.1 for cocur/slugify ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) - Installing cocur/slugify (v2.1.1) Downloading: 100% Writing lock file Generating autoload files

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

  1. ls -l
Output
total 12 -rw-rw-r-- 1 sammy sammy 59 May 17 10:24 composer.json -rw-rw-r-- 1 sammy sammy 2894 May 17 10:24 composer.lock drwxrwxr-x 4 sammy sammy 4096 May 17 10:24 vendor

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

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

Понимание ограничений версии

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

  1. cat composer.json
  1. Output
    {
  2. "require": {
  3. "cocur/slugify": "^2.1"
  4. }
  5. }

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

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

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

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

Вернемся к примеру приложения slugify. Мы будем использовать nano для создания скрипта test.php, в котором мы будем использовать библиотеку cocur/slugify:

  1. nano test.php
  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use Cocur\Slugify\Slugify;
  4. $slugify = new Slugify();
  5. 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-make-a-slug-from-it.

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

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

  1. composer update

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

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

  1. composer update vendor/package vendor2/package2

Заключение

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

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