Вступление
Composer - популярный инструмент управления зависимостями для PHP, созданный в основном для облегчения установки и обновления зависимостей проекта. Он проверит, от каких других пакетов зависит конкретный проект, и установит их для вас, используя соответствующие версии в соответствии с требованиями проекта.
Из этого туториала вы узнаете, как установить Composer и начать его работу на сервере Ubuntu 14.04.
Предпосылки
Для этого урока вам понадобятся:
-
Сервер под управлением Ubuntu 14.04
-
Доступ к серверу как обычный пользователь сsudo permission
[[step-1 -—- install-the-dependencies]] == Шаг 1. Установка зависимостей
Перед тем, как загрузить и установить Composer, мы должны убедиться, что на нашем сервере установлены все зависимости.
Сначала обновите кеш менеджера пакетов, выполнив:
sudo apt-get update
Теперь давайте установим зависимости. Нам понадобитсяcurl
для загрузки Composer иphp5-cli
для его установки и запуска. git
используется Composer для загрузки зависимостей проекта. Все можно установить с помощью следующей команды:
sudo apt-get install curl php5-cli git
Теперь вы можете перейти к следующему шагу.
[[step-2 -—- download-and-install-composer]] == Шаг 2. Загрузка и установка Composer
Установка Composer действительно проста и может быть выполнена с помощью одной команды:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Это загрузит и установит Composer как общесистемную команду с именемcomposer
в разделе/usr/local/bin
. Вывод должен выглядеть так:
Output#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Чтобы проверить вашу установку, запустите:
composer
И вы должны получить вывод, похожий на этот:
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.0-dev (9859859f1082d94e546aa75746867df127aa0d9e) 2015-08-17 14:57:00
Usage:
command [options] [arguments]
Options:
--help (-h) Display this help message
--quiet (-q) Do not output any message
--verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version (-V) Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
--no-interaction (-n) Do not ask any interactive question
--profile Display timing and memory usage information
--working-dir (-d) If specified, use the given directory as working directory.
. . .
Это означает, что Composer был успешно установлен в вашей системе.
[.note] # Если вы предпочитаете иметь отдельные исполняемые файлы Composer для каждого проекта, который вы можете разместить на этом сервере, вы можете просто установить его локально для каждого проекта. Этот метод также полезен, когда пользователь вашей системы не имеет разрешения на установку программного обеспечения в масштабе всей системы. В этом случае установку можно выполнить с помощьюcurl -sS https://getcomposer.org/installer | php
- это сгенерирует файлcomposer.phar
в вашем текущем каталоге, который можно запустить с помощьюphp 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, вы получите результат, подобный следующему:
Вы увидите два числа на правой стороне каждого пакета в списке. Число сверху показывает, сколько раз пакет был установлен, а число снизу показывает, сколько раз пакет был помечен на GitHub. Вы можете изменить порядок результатов поиска на основе этих чисел (найдите две иконки в правой части панели поиска). Вообще говоря, пакеты с большим количеством установок и большим количеством звезд имеют тенденцию быть более стабильными, так как их использует очень много людей. Также важно проверить актуальность описания пакета - действительно ли это то, что вы ищете?
Нам нужен простой конвертер строк в слаг. По результатам поиска пакетcocur/slugify
кажется подходящим, с разумным количеством установок и звездочек. (Пакет немного дальше по странице, чем показано на скриншоте.)
Вы заметите, что пакеты на Packagist имеют имяvendor и имяpackage. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который Github использует для своих репозиториев:vendor/package
. Библиотека, которую мы хотим установить, использует пространство именcocur/slugify
The namespace is what we need in order to require the package in our project.
Требование пакета
Теперь, когда мы точно знаем, какой пакет хотим установить, мы можем запуститьcomposer require
, чтобы включить его в качестве зависимости, а также сгенерировать файлcomposer.json
для проекта:
composer require cocur/slugify
OutputUsing version ^1.3 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing cocur/slugify (v1.3)
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 Sep 9 16:22 composer.json
-rw-rw-r-- 1 sammy sammy 2835 Sep 9 16:22 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Sep 9 16:22 vendor
Файлcomposer.lock
используется для хранения информации о том, какие версии каждого пакета установлены, и обеспечения использования тех же версий, если кто-то другой клонирует ваш проект и устанавливает его зависимости. Каталогvendor
- это то место, где находятся зависимости проекта. Папкаvendor
должна быть переданаnot в систему контроля версий - вам нужно только включить файлыcomposer.json иcomposer.lock.
[.note] # При установке проекта, который уже содержит файлcomposer.json
, вам необходимо запуститьcomposer install
, чтобы загрузить зависимости проекта.
#
Понимание ограничений версии
Если вы проверите содержимое вашего файлаcomposer.json
, вы увидите что-то вроде этого:
cat composer.json
composer.json
{
"require": {
"cocur/slugify": "^1.3"
}
}
Вы могли заметить специальный символ^
перед номером версии наcomposer.json
. Composer поддерживает несколько различных ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и стабильность вашего проекта. Оператор вставки (^
), используемый автоматически созданным файломcomposer.json
, является рекомендуемым оператором для максимальной совместимости послеsemantic versioning. В этом случае он определяет1.3 как минимальную совместимую версию и позволяет обновлять любую будущую версию ниже2.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, проверьте ихofficial documentation.
[[step-4 -—- including-the-autoload-script]] == Шаг 4. Включение скрипта автозагрузки
Composer также предоставляет скрипт автозагрузки, который вы можете включить в свой проект, чтобы получить автозагрузку бесплатно. Это значительно облегчает работу с вашими зависимостями и определяет ваши собственные пространства имен.
Единственное, что вам нужно сделать, это включить файлvendor/autoload.php
в ваши сценарии PHP перед созданием любого экземпляра класса.
Вернемся к примеру приложенияslugify. Мы создадим скриптtest.php
, в котором будем использовать библиотекуcocur/slugify:
vim 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 - это мощный инструмент, который должен быть у каждого разработчика PHP.
Помимо предоставления простого и надежного способа управления зависимостями проекта, он также устанавливает новый стандарт де-факто для совместного использования и обнаружения пакетов PHP, созданных сообществом.
В этом руководстве рассказывается об основах работы с Composer в Ubuntu 14.04.