Я работаю над проектом, который использует Composer (https://getcomposer.org/) для ссылки на различные библиотеки PHP.
Я также использую подмножества git (http://git-scm.com/docs/git-submodule) для ссылки на различные библиотеки JavaScript (где библиотеки указывают на определенные теги выпуска, например, "v1.2.34").
Чтобы упростить проект, я рассматриваю возможность использования Composer для использования только подмодулей, если Composer не предоставляет функции, которые Git Submodules этого не делают. Итак, что дает PHP Composer, что Git Submodules нет?
Одной из причин прилипания к Composer является то, что он обрабатывает автозагрузку для вас:
Для библиотек, которые определяют информацию автозагрузки, Composer создает файл
vendor/autoload.php
. Вы можете просто включить этот файл, и вы получите автозагрузку бесплатно.require 'vendor/autoload.php';
Это делает его очень простым в использовании стороннего кода. Например: если ваш проект зависит от монолога, вы можете просто начать с него использовать классы, и они будут автоматически загружены.
$log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler( 'app.log', Monolog\Logger::WARNING )); $log->addWarning('Foo');
Вы даже можете добавить свой собственный код в автозагрузчик, добавив поле
autoload
вcomposer.json
.{ "autoload": { "psr-4": {"Acme\\": "src/"} } }
Композитор зарегистрирует автозагрузчик PSR-4 для пространства имен
Acme
.
Как отмечает Джек, Composer также обрабатывает зависимости. То есть, если вы хотите использовать библиотеку X
, и это зависит от библиотек Y
и Z
, Composer будет устанавливать все три.
Composer также поддерживает более гибкое управление версиями, например "использовать самую последнюю версию 1.2.x", и это стандартный инструмент для работы с современным PHP.