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

Вступление

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

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

Предпосылки

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

  • Система под управлением Ubuntu 16.04

  • Доступ к серверу как обычный пользователь сsudo permission

[[step-1 -—- install-the-dependencies]] == Шаг 1. Установка зависимостей

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

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

sudo apt-get update

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

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

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

[[step-2 -—- download-and-install-composer]] == Шаг 2. Загрузка и установка Composer

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

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

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

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. Вывод должен выглядеть так:

OutputAll settings correct for using Composer
Downloading 1.1.1...

Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

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

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 был успешно установлен в вашей системе.

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

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

php composer-setup.php

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

[[step-3 -—- generate-the-composer-json-file]] == Шаг 3. Создание файла composer.json

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

Вам не нужно создавать этот файл вручную - при этом легко встретить синтаксические ошибки. Composer автоматически генерирует файлcomposer.json, когда вы добавляете зависимость в свой проект с помощью командыrequire. Дополнительные зависимости также могут быть добавлены таким же образом, без необходимости вручную редактировать этот файл.

Процесс использования Composer для установки пакета в качестве зависимости в проекте обычно включает следующие шаги:

  • Определите, какая библиотека нужна приложению

  • Найдите подходящую библиотеку с открытым исходным кодом вPackagist.org, официальном репозитории пакетов для Composer.

  • Выберите пакет, от которого вы хотите зависеть

  • Запуститеcomposer require, чтобы включить зависимость в файлcomposer.json, и установите пакет

Мы увидим, как это работает на практике с простым демонстрационным приложением.

Цель этого приложения - преобразовать данное предложение в строку, удобную для URL - aslug. Это обычно используется для преобразования заголовков страниц в URL-пути (например, последняя часть URL-адреса для этого урока).

Давайте начнем с создания каталога для нашего проекта. Назовем егоslugify:

cd ~
mkdir slugify
cd slugify

Поиск пакетов на Packagist

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

Packagist Search: easy-slug/easy-slug

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

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

Вы заметите, что пакеты на Packagist имеют имяvendor и имяpackage. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который GitHub использует для своих репозиториев:vendor/package. Библиотека, которую мы хотим установить, использует пространство именcocur/slugifyThe namespace is what we need in order to require the package in our project.

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

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

composer require cocur/slugify
OutputUsing 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:

ls -l
Outputtotal 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 должна быть переданаnot в систему контроля версий - вам нужно только включить файлыcomposer.json иcomposer.lock.

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

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

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

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

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

[[step-4 -—- including-the-autoload-script]] == Шаг 4. Включение скрипта автозагрузки

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

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

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

nano test.php

test.php

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.

[[step-5 -—- update-the-project-dependencies]] == Шаг 5 - Обновление зависимостей проекта

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

composer update

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

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

composer update vendor/package vendor2/package2

Заключение

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

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

Related