Вступление
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, вы получите результат, подобный следующему:
Вы увидите два числа на правой стороне каждого пакета в списке. Число сверху показывает, сколько раз пакет был установлен, а число снизу показывает, сколько раз пакет был помечен на 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 ^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, созданных сообществом.