Я работаю над проектом, который использует 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/"} } }
Composer зарегистрирует автозагрузчик PSR-4 для
Acme
Пространство имен.
Как Джек указывает, Composer также обрабатывает зависимости. То есть, если вы хотите использовать библиотеку X
и это зависит от библиотек Y
а также Z
Композитор установит все три.
Композитор также поддерживает более гибкое управление версиями, например «использовать самую последнюю версию 1.2.x», и это де-факто стандартный инструмент при работе с современным PHP.
Других решений пока нет …