Статьи

Composer решает проблему совместного использования кода PHP

  1. Легко для пользователей
  2. Легко для разработчиков
  3. Где мы сейчас?

В PHP у нас была паршивая культура совместного использования кода. Потому что в зависимости от кода от других, как было сложно, каждое крупное PHP-приложение или фреймворк практически должны были переопределить весь мир. Только некоторые инструменты, такие как PHPUnit , смогли преодолеть этот барьер и стали де-факто стандартами за пределами проекта. А в остальном: просто пиши сам.

Но теперь Composer и его коллега из репозитория Packagist обещают все это изменить. И, очевидно, новые соглашения, такие как поддержка пространства имен PHP и стандартная помощь автозагрузчика PSR-0 .

Composer вдохновлен NPM, который создал культуру совместного использования кода и легкого развертывания в сообществе Node.js.

Легко для пользователей

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

От пакетов, которые зарегистрированы на packagist.org, очевидно, проще всего зависеть, но вы также можете указать пакеты, поступающие из пользовательских репозиториев (таких как внутренняя система контроля версий вашей компании) или необходимых расширений PHP.

Вот, например, composer.json от PHP-провайдера Midgard :

{
    "name": "midgard/phpcr",
    "type": "library",
    "require": {
        "php": ">=5.3.0",
        "ext-midgard2": ">=10.05.5",
        "phpcr/phpcr": ">=2.1.0-beta1"
    }
}

С этим файлом Composer знает, что наш провайдер PHPCR работает только на PHP 5.3 или новее (так как он использует пространства имен), и что ему нужны расширение Midgard PHP и классы интерфейса PHPCR .

Теперь установка проекта проста:

$ wget http://getcomposer.org/composer.phar 
$ php composer.phar install

Как насчет автозагрузки? Традиционно PHP требовал, чтобы вы вручную включали или требовали все файлы, которые вы хотели использовать в своем коде, с возможностью написания автозагрузчика для его автоматической обработки при вызове неопределенного класса. Но управлять этими автозагрузчиками тоже нелегко.

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

require 'vendor/.composer/autoload.php';

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

Легко для разработчиков

Хотя простота установки важна, ее недостаточно для создания экосистемы. Другая вещь, которая должна быть легкой, это публикация кода. По сути: если вы написали часть функциональности в PHP, которую вы могли бы увидеть в другом проекте, вам не составит труда опубликовать ее в виде библиотеки.

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

С Composer это очень просто . Вы снова определяете composer.json для своего пакета и помещаете его в Git-репозиторий вашего проекта. Затем просто зарегистрируйте URL-адрес хранилища Git на packagist.org.

После этого Packagist сделает паук в вашем хранилище и сделает его доступным в виде пакета.

Публикация новых версий очень проста: просто обновляйте свой composer.json и помечайте свои релизы в Git.

Где мы сейчас?

Для Composer все еще рано, и проект развивается с большой скоростью. Тем не менее, он уже достаточно хорош для управления зависимостями от современных PSR-0-совместимых библиотек.

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

Но если ваш код уже полностью распределен по именам, это отличное время для начала работы с Composer .

 

Источник: http://bergie.iki.fi/blog/composer_solves_the_php_code-sharing_problem/