Введение
Composer является популярным инструментом управления зависимостей для PHP, созданный в основном для облегчения установки и обновления для зависимостей проекта. Он проверит, какие другие пакеты конкретного проекта зависит от него, и установить их для вас, используя соответствующие версии в соответствии с требованиями проекта.
Этот урок покажет, как установить и как начать работу с композитором на сервере Debian 8.
Предпосылки
Для этого урока вам понадобятся:
- Один сервер Debian 8 с не корневым пользователем sudo, как показано в начальной настройки сервера с Debian 8.
Шаг 1 – Установка зависимостей
Перед тем, как скачать и установить Composer, мы должны убедиться, что наш сервер имеет все необходимые установленные зависимости.
Во-первых, необходимо обновить кэш менеджер пакетов.
sudo apt-get update
Теперь, давайте установим зависимости. Нам понадобится curl
для того, чтобы загрузить композитор и php5-cli
, пакет PHP, для установки и запуска. Композитор использует git
, систему управления версиями, чтобы загрузить проект зависимостей. Вы можете установить все три из этих пакетов сразу же с помощью этой команды:
sudo apt-get install curl php5-cli git
Теперь, когда основные зависимости устанавленны, давайте продолжим и установить сам Composer.
Шаг 2 – Загрузка и установка Композитора
Мы будем следовать инструкциям, как написано в официальной документации композитора с небольшой модификацией для глобальной установки Composer в /usr/local/bin
. Это позволит каждому пользователю на сервере использовать Composer.
Загрузите программу установки в каталог /tmp
.
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
Посетите страницу pubkeys композитора и скопируйте строку SHA-384 в верхней части. Затем выполните следующую команду, заменив строку sha_384_string
.
php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === 'sha_384_string') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('/tmp/composer-setup.php'); } echo PHP_EOL;"
Эта команда проверяет хэш загруженного файла с правильным хэшем с сайта композитора. Если он соответствует, он напишет что установщик проверен. Если он не соответствует, он будет печатать установщик поврежден, в этом случае вы должны дважды проверить, что вы скопировали строку SHA-384 правильно.
Далее, мы установим Composer. Для того, чтобы установить его на глобальном уровне в рамках /usr/local/bin
, мы будем использовать флаг --install-dir
; --filename
сообщает установщику имя исполняемого файла композитора. Вот как сделать это в одной команде:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Вы увидите сообщение вроде следующего:
All settings correct for using Composer Downloading... Composer (version 1.3.2) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer
Вы можете убедиться, что Composer был правильно установлен, проверив его версию.
composer --version
Вы должны увидеть версию, которая была установлена. Во время написания этой статьи, версия Composer следующая:
Composer version 1.3.2 2017-01-27 18:23:41
И, наконец, вы можете безопасно удалить скрипт установки, так как вам он больше не нужен.
rm /tmp/composer-setup.php
Composer теперь настроен и работает, ожидая, когда будет использоваться вашим проектом. В следующем разделе вы будете генерировать файл composer.json
, который включает в себя PHP библиотеки, от которых зависит ваш проект.
Шаг 3 – Генерация файла composer.json
Для того, чтобы использовать Composer для проекта, вам понадобится файл composer.json
. Файл composer.json
сообщает Composer, какие зависимости его нужно скачать для вашего проекта, и какие версии каждого пакета разрешено устанавливать. Это важно, чтобы сохранить ваш проект последовательным и избежать установки нестабильных версий, которые потенциально могут привести к обратной проблемы совместимости.
Вам не нужно создавать этот файл вручную; это легко нарваться на синтаксические ошибки, если вы делаете. Композитор автоматически генерирует файл composer.json
при добавлении зависимости к проекту с помощью команды require
. Дополнительные зависимости также могут быть добавлены таким же образом, без необходимости вручную редактировать этот файл.
Процесс использования Composer для установки зависимого пакета в проекте обычно включает в себя следующие шаги:
- Определить, какие библиотеки необходимы приложению
- Проверка подходящих библиотек с открытым исходным кодом на Packagist.org, официальный репозиторий для Composer
- Выбор пакет, который вы хотите зависеть
- Запуск
composer require,
включение зависимости в файлcomposer.json
и установка пакета
Мы посмотрим, как это работает на практике с помощью простого демонстрационного приложения.
Целью данного приложения является превратить данное предложение в slug, который является URL-дружеской строкой. Это используется для преобразования названий страниц в пути URL (как финальная часть URL для этого урока).
Давайте начнем с создания каталога для проекта. Мы будем называть его slugify :
cd ~ mkdir slugify cd slugify
Далее, давайте искать библиотеки, которые мы должны использовать.
При поиске пакетов на Packagist
Далее, мы будем искать Packagist для пакета, чтобы помочь произвести slug. Если вы ищете “slug“, вы увидите список пакетов. На правой стороне каждого пакета в списке, вы увидите два номера: номер на вершине, сколько раз был установлен пакет и номер внизу показывает, сколько раз пакет был звездой на GitHub.
Вообще говоря, пакеты с большим количеством установок и звезды, как правило, более стабильны, потому что многие люди их используют. Важно также, проверить описание пакета, чтобы убедиться, что пакет действительно тот, что вы ищете.
То, что нам нужно, это простой конвертер строки в slug. В качестве примера здесь, мы будем использовать пакет cocur/slugify
. Вроде бы хороший пакет, потому что он имеет разумное количество установок и звезд.
Вы заметите, что пакеты на Packagist имеют имя поставщика и имя пакета. Каждый пакет имеет уникальный идентификатор (пространства имен) в том же формате GitHub использует для своих хранилищ: vendor/package
. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugify
. Пространство имен является тем, что нам нужно для того, чтобы потребовать пакет в нашем проекте.
Теперь, когда мы определили библиотеку мы хотим добавить его в файл composer.json
.
Требование пакета
Мы можем запустить composer require,
чтобы включить библиотеку в качестве зависимости, а также сгенерировать файл composer.json
для проекта:
composer require cocur/slugify
Using version ^2.3 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 (v2.3) Downloading: 100% Writing lock file Generating autoload files
Как вы можете видеть из вывода, композитор автоматически решил, какая должна быть использована версия пакета. Если вы посмотрите каталог вашего проекта сейчас, он будет содержать два новых файла: composer.json
и composer.lock
, и каталог /vendor
:
ls -l
total 12 -rw-r--r-- 1 sammy sammy 59 Feb 1 13:43 composer.json -rw-r--r-- 1 sammy sammy 2896 Feb 1 13:43 composer.lock drwxr-xr-x 4 sammy sammy 4096 Feb 1 13:43 vendor
Файл composer.lock
используется для хранения информации о том, какие установлены версии каждого пакета, и убедится, что одни и те же версии используются, если кто – то клонирует ваш проект и устанавливает его зависимости. Каталог /vendor
, где расположены зависимости проекта. Каталог /vendor
не должен совершаться в системе контроля версий; вам нужно только включить файлы composer.json
и composer.lock
.
Вы можете заметить , что файл composer.lock
содержит конкретную информацию о зависимости версии PHP библиотек нашего проекта. Композитор использует специальный синтаксис для ограничения библиотек для конкретных версий. Давайте посмотрим , как это работает.
Понимание ограничений версий
Если проверить содержимое вашего файла composer.json
, то вы увидите что – то вроде этого:
cat composer.json
{ "require": { "cocur/slugify": "^2.3" } }
Существует символ вставки, ^
перед номером версии. Композитор поддерживает несколько различных ограничений и форматов для определения требуемой версии пакета, для того, чтобы обеспечить гибкость в то же время сохраняя проект стабильным. Оператор каретка используется в автоматически сгенерированном файле composer.json и
является рекомендуемым оператором для обеспечения максимальной совместимости, после семантического контроля версий. В этом случае она определяет 1.3 в качестве минимального совместимой версии, а также позволяет обновления к любой будущей версии ниже 2.0 . Вы можете прочитать более подробную информацию о основных версиях в документации версий Composer.
До сих пор мы видели, как добавлять и ограничивать PHP библиотеки в нашем проекте, нуждается в Composer, используя файл composer.json
. Следующим шагом является использование этих библиотек внутри нашего приложения. Для этой цели, композитор дает файл autoload.php
, который облегчает процесс загрузки внешних библиотек.
Шаг 4 – Включение автозагрузочного скрипта
Композитор предоставляет скрипт автозагрузки, который вы можете включить в свой проект, чтобы получить самозагружатся бесплатно. Это делает его гораздо проще работать с зависимостями и определить свои собственные пространства имен. Единственное, что вам нужно сделать, это включить файл vendor/autoload.php
в ваших скриптах перед любым классом экземпляра.
Давайте вернемся к примеру приложения slugify. Используйте nano
или ваш любимый текстовый редактор, чтобы создать сценарий test.php
, где мы будем использовать библиотеку cocur/slugify
.
nano test.php
<?php require __DIR__ . '/vendor/autoload.php'; use Cocur\Slugify\Slugify; $slugify = new Slugify(); echo $slugify->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
Вы полностью настроить композитора, но читайте дальше, чтобы узнать, как сохранить установки.
Шаг 5 – Обновление Composer и зависимости проекта (Необязательно)
Чтобы обновить Composer, вы можете использовать встроенную команду self-update
. Поскольку композитор установлен в глобальном масштабе, необходимо выполнить команду с привилегиями суперпользователя.
sudo -H composer self-update
Вы можете обновить один или несколько специфических библиотек, перечислив их конкретно в composer update
.
composer update namespace/package
Если вы хотите обновить все ваши зависимостей проекта, запустите команду update
.
composer update
Это будет проверять наличие новых версий библиотек, необходимых вам в вашем проекте. Если новая версия найдена, и она будет совместима с версией ограничения, определенного в файле composer.json
, он заменит предыдущую версию установленной. Файл composer.lock
будет обновлен, чтобы отразить эти изменения.
Вывод
Композитор является мощным инструментом, каждый разработчик PHP должен иметь в его своем комплекте необходимых программ. Помимо предоставления простой и надежный способ для управления зависимостями проекта, он также устанавливает новый стандарт де-факто для совместного использования и обнаружения PHP пакетов, созданных сообществом.
На этом уроке мы кратко описали основы Composer: как установить его, как создать проект и найти пакеты для него, и как сохранить его. Чтобы узнать больше, вы можете изучить официальную документацию Composer.