Pull to refresh

Замена PEAR на Composer

Reading time 2 min
Views 11K
Думаю, большинство разработчиков, использующих PHP, уже в знают, что популярные проекты начинают отказываться от распространения через PEAR в пользу Composer (например PHPUnit и Symfony). Некоторые расстраиваются по этому поводу, дескать, теперь вместо однократной общесистемной установки того же PHPUnit, придётся включать его зависимостью в каждый проект. Совсем необязательно! Composer прекрасно умеет устанавливать пакеты для общего использования.

Установка для одного пользователя


Это удивительно, но многие не знают о существовании команды global. Это даже не столько самостоятельная команда, сколько префикс, меняющий поведение других команд, заставляющий их использовать composer.json не из текущей папки, а из домашней папки пользователя. Как написано в документации, команда:

php composer.phar global require fabpot/php-cs-fixer:dev-master

установит запрошенный пакет в $COMPOSER_HOME/vendor, а исполняемые файлы в $COMPOSER_HOME/vendor/bin.

Переменная $COMPOSER_HOME по умолчанию указывает на "/home//.composer" в *nix-системах, на "/Users//.composer" в OSX и на "C:\Users\\AppData\Roaming\Composer" в Windows.

Вам останется только добавить $COMPOSER_HOME/vendor/bin
в переменную окружения $PATH и вы сможете запускать установленные через Composer приложения для любого вашего проекта.

Общесистеманя установка Composer


Конечно, описанный выше метод, не совсем то же самое, что делает PEAR. Установленные пакеты будут доступны только одному пользователю. Для большинства случаев, этого будет более чем достаточно. Но иногда желательнее чтобы однажды установленный пакет был доступен для всех пользователей. Это можно сделать, установив пакеты, скажем, для root-а, и добавив /root/.composer/vendor/bin в общесистемную конфигурацию оболочки (напр. в /etc/profile).

Есть и другой способ. Для наших внутренних нужд я написал небольшую BASH-обёртку для composer, меняющую поведение команды global.

Для установки надо скачайть файл composer и поместить его в /usr/bin. В принципе можно поместить его в любую другую папку, доступную через $PATH, например для FreeBSD правильнее будет выбрать /usr/local/bin (я использую этот путь и в Linux). От выбранной вами папки будет зависеть куда будут установлены composer.phar и зависимости. Для /usr/bin они будут размещены в /usr/share/composer, для /usr/local/bin в /usr/local/share/composer и т. д.

После скачивания сделайте файл исполняемым и запустите. Он скачает composer.phar, создаст пустой composer.json и сделает символическую ссылку на него в /etc для Linux и в ../etc для других систем.

Теперь, при выполнении:

composer global require phpunit/phpunit:~4.0


PHPUnit будет установлен в /usr[/local]/share/composer/vendor, а исполняемый файл phpunit в /usr[/local]/bin

Немного о граблях


Переходя с PEAR на Composer надо помнить несколько вещей:

  • В зависимости от выбранного вами способа и ваших настроек, может получиться так, что и Composer и PEAR будут устаналивать исполняемые файлы в одну папку. В этом случае, при удалении пакета PEAR, он может снести файл, установленный Composer.
  • Некоторые пакеты, распространяемые через Composer, используют пакеты, распространяемые через PEAR. Например Phing. Так что снеся PEAR-овский PHP_PMD и установив Composer-овский вариант, вы получите неработающий <phpmd/>.
Tags:
Hubs:
+12
Comments 3
Comments Comments 3

Articles