Блог

PHP:Менеджер зависимостей

На сегодняшний день существует большое количество библиотек и framework, которые помогают облегчить разработку. Менеджер зависимостей существует и у других популярных языках, в Ruby – это gen – (RubyGems), в Python – setuptools, pip, в Perl – CPAN. Более чем уверен, что вы используете сторонние библиотеки. До недавнего времени в PHP не существовало удобного способа менеджера зависимостей для проектов. Если вы управляете зависимостями в вашем проекте, вам приходится беспокоиться об автозагрузчиках и вручную закидывать свежую версию библиотеки или ещё хуже всего полностью framework. Теперь это не требуется. Существует две основные системы управления пакетами для PHP — Composer и PEAR. Какую использовать вам? Выбирайте сами.

  • Composer для управления зависимостями одного проекта.
  • PEAR для управления зависимостями во всей вашей системе (очень важно это помнить).

Composer (getcomposer.org) – достаточно популярный менеджер зависимостей для PHP. Composer – позволяет описать какие нужно установить библиотеки и установит за вас! Composer – позволяет устанавливать зависимости проекта которые будут доступны только для вашего проекта. Все библиотеки устанавливаются внутрь проекта в отдельные каталоги, как будто вы взяли и сами скопировали.

PEAR (pear.php.net/packages.php) – это репозиторий PHP-классов для решения многих типовых задач. По сути это просто полезный репозиторий классов. Для установки и удаления PEAR-пакетов в PHP есть команда “pear“, но пакеты PEAR также можно просто положить в папку с приложением и использовать. PEAR устанавливает пакеты глобально, что означает то, что после установки, они доступны всем проектам на этом сервере. Это может быть полезно, если большинство проектов используют пакеты с одинаковой версией, но может привести и к проблемам.

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

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

Узнать какие можно установить пакеты через Composer, готовых для использования в вашем проекте. Можно узнать список пакетов на официальном сайте репозитории (packagist.org) для Composer-совместимых PHP библиотек.

Composer является инструментом для управления зависимостями в PHP. Позволяет указать зависимость которые потребуются для проекта и установит их в своем проекте. Composer не менеджер пакетов. Да, речь идет о “пакетах” или библиотеках, но он управляет на основе каждого проекта, установив их в каталоге (например в vendor) в вашем проекте.

Стоит добавить, что Composer требует как минимум PHP 5.3.2+ для запуска. Composer является мультиплатформенным и разработчики стремятся сделать его одинаково хорошим на всех операционных платформах Windows, Linux и OSX.

Как установить и указать зависимости
Перейдите в ваш проект и скачайте composer.phar выполнив следующую команду.
[project]>php -r "eval(' ?>' .file_get_contents('https://getcomposer.org/installer')); "

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

[project]>php composer.phar init

Команда php composer.phar init проведет вас через создание полного файла composer.json для вашего проекта. Дальше вы указываете «композитору» как назвать ваш проект и так далее, а так же находите пакет который хотите установить, выбираете его, а потом смотрите необходимую его версию на сайте packagist.org.

После чего в папке вашего проекта появиться файл composer.json, со всеми описанными зависимостями. Теперь осталось их только установить. И делается это следующей командой:

[project]>php composer.phar install

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

Команда php composer.phar require добавляет зависимость в проект, если в каталоге нет файла composer.json, он будет создан. Запустите это в корневой директории вашего проекта, куда вы загружали composer.phar:

[project]>php composer.phar require vendor/package:2.*

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

<?php
require 'vendor/autoload.php';

Теперь вы можете использовать зависимости вашего проекта и они будут автоматически загружаться (по требованию).

Очень удобно указывать требуемые версии. Если вы нуждаетесь в версии ~1.8, что значит “всё что новее 1.8.0, но меньше 2.0.x-dev”. Вы так-же можете использовать шаблон *, как 1.8.*. Теперь команда Composer php composer.phar update обновит все ваши зависимости до новейших версий, которые соответствуют указанным ограничениям.

PEAR с Composer

Если вы желаете подключить Pear к Composer для обработки зависимостей. Этот пример установит код из pear2.php.net:

{
    "repositories": [{
        "type" : "pear",
        "url"  : "http://pear2.php.net"
    }],
    "require": {
        "pear-pear2.php.net/PEAR2_Cache_Lite": "*",
        "pear-pear2/PEAR2_HTTP_Request": "*"
    }
}

Блок “repositories” дает понять, что он должен сделать “initialise” (или “discover” в терминологии PEAR) репозиторий pear. Блок “require” может содержать имена пакетов с префиксом, pear-channel/Package или укажите ссылку для установки.

Префикс “pear” жестко ограничен, чтобы избежать любых конфликтов, так как каналы Pear могут быть схожи с другими поставщиками пакетов. Когда код будет установлен он будет доступен в вашей папке vendor и автоматически доступен через автозагрузчик (файл Autoload) Composer.

vendor/pear-pear2.php.net/*

Чтобы использовать этот пакет PEAR просто объявите как ниже:

$cache = new pear2\Cache\Lite();
$request = new pear2\HTTP\Request();

Просмотреть весь список пакетов в Pear можно на официальном сайте http://pear2.php.net/categories/.

Так же можно подключить Git и другие репозитории или напрямую пакеты.

{
     "repositories" : [{
         "type" : "git",
         "url" : "https://github.com/foobar/intermediate.git"
      }, {
         "type":"pear",
         "url" : "http://pear.foobar.repo",
         "vendor-alias" : "foobar"
     }],
     "require":{
         "foobar/TopLevelPackage1" : "*",
         "foobar/TopLevelPackage2" : "*"
      }
}

Использование Composer облегчает много монотонной работы и не нужно вручную следить за обновлениями всех ваших пакетов. Больше можно узнать в официальной документации или online book.