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

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

Вступление

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

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

Предпосылки

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

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

[[step-1 -—- install-the-dependencies]] == Шаг 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.

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

Composer предоставляетinstaller, написанный на 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 успешно установлен в вашей системе и доступен для всей системы.

[.Примечание]##

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

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

Теперь давайте рассмотрим использование Composer для управления зависимостями.

[[step-3 -—- using-composer-in-a-php-project]] == Шаг 3. Использование Composer в проекте PHP

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

Чтобы использовать 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.org пакет, который поможет нам сгенерироватьslugs. Если вы будете искать термин «слизняк» в Packagist, вы получите результат, подобный следующему:

Packagist Search: easy-slug/easy-slug

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

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

Пакеты на Packagist имеют имяvendor и имяpackage. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который GitHub использует для своих репозиториев, в формеvendor/package. Библиотека, которую мы хотим установить, использует пространство имен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.

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

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

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

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

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

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

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

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

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

nano test.php

Добавьте следующий код, который вводит файлvendor/autoload.php, загружает зависимостьcocur/slugify и использует ее для создания слага:

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-project-dependencies]] == Шаг 5 - Обновление зависимостей проекта

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

composer update

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

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

composer update vendor/package vendor2/package2

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

Заключение

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

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

Related