В процессе разработки, нам необходимо использовать стороние библиотеки, и соответсвенно необходимо централизованно их устанавливать. Прошли те времена когда для того чтобы поставить библиотеку, надо было скачать скрипты и распаковать их себе в проект. Сейчас для этого используют менеджеры библиотек, их очень много например: Сomposer, Bower, Npm, Component и другие.
В проектах на Symfony2 используется Composer, но им не очень удобно устанавливать js/css библиотеки, поскольку все библиотеки ставятся в папку которая не должна быть доступна из браузера. Мы рассмотрим какими способами в Symfony2 проекте можно ставить js/css библиотеки, некоторые способы подойдут любому проекту в котором используется Composer.
Bower
Для менеджера пакетов nodejs проектов возможно использовать bower. В нашем случае конечно проект не на nodejs, но мы можем bower поставить отдельно и использовать sp/bower-bundle который позволяет из командной строки и устанавливать библиотеки. Установить и настроить его достаточно просто об этом можно прочитать в документации к библиотеке.
Плюсы:
- использует bower. Можно использовать все возможности bower.json.
- есть скрипты для установки и обновлении в composer.
Минусы:
- необходимо дополнительно ставить bower, через npm.
- устанавливает js/css библиотеки в указанный Bundle, также там хранит свой cache. При использовании capifony нам надо будет правильно указывать путь с cache, чтобы пакеты не устанавливались каждый раз при обновлении.
Вывод
Вполне рабочий вариант. Если используете capifony не забывайте добавлять папку с библиотеками в параметр shared_children и правильно указывать папку для кэш.
Bowerphp
Нам в процессе разработки все-же хочется иметь меньше “ручных” зависимостей, которые надо устанавливать дополнительно, а не средствами composer. Был найден вариант с bowerphp это библиотека реализует bower на PHP, используя компоненты Symfony. Но это библиотека, поэтому для работы на Symfony Framework был сделан fdevs/bower-php-bundle. Установка ни чем не отличается от установки стандартных библиотек, подробнее можно прочитать в документации.
Минусы:
- у библиотеки bowerphp еще нет стабильной версии, поэтому есть ошибки. К примеру, с чем я столкнулся, не всегда правильную версию библиотеки ставит.
Плюсы:
- нет зависимости от nodejs библиотек. Все ставится с помощью composer.
- пути настраиваются какие удобно.
- для указания библиотек использует настройки bower.json. Поэтому можно использовать bower если чем-то библиотека не подходит.
Выводы
Мне вариант понравился больше предыдущего - можно работать только с composer. Но из-за того что не всегда верно ставит версии библиотек, пришлось от него отказаться. Есть надежда что проект будет развиваться и когда появится стабильная версия ошибок будет меньше.
composer-asset-plugin
Для контроля js/css есть плагин fxp/composer-asset-plugin. Поставить его еще проще и можно прочитать в документации к плагину. Работает он с любыми проектами в которых используется composer.
Минусы:
- ставит все что находится в пакете в указанную папку. Даже архивы или демо данные.
Плюсы:
- работает не только с bower, но и с npm.
Выводы
Я его очень мало использовал, но не могу не упомянуть. Возможно это один из лучших вариантов, поскольку подходит любому проекту.
component
Кроме composer и bower есть еще один менеджер пакетов - component. Для использования в composer есть плагин component-installer. В нем можно указать в какой каталог собирать необходимые нам файлы или папки. Ставит саму библиотеку он все равно в vendor, но копирует файлы указаны в его настройках в папку указаную в настройках composer. Создает также файл для работы с библиотекой requirejs, поэтому данный вариант больше всего подходит если вы используете данную библиотеку. У данного плагина есть возможность ставить библиотеки которые не используют никакие менеджеры, или которые используют только composer.
Минусы:
- не все необходимые библиотеки есть в component. Это конечно все можно описать в composer и для нас достаточно чтобы библиотека была только на публичном репозитории.
Плюсы:
- не использует ничего кроме composer.
- создает requirejs для работы с библиотеками.
Выводы
Пока я решил остановиться на нем, минусов особых я не заметил. Последние два варианта, это то с чем можно работать уже сейчас, не надо ничего ставить дополнительно.
Заключение
При разработке на Symfony и не только, менеджер библиотек composer позволяет работать не только с php библиотеками но и с js/css, а также с npm. Времена когда, чтобы использовать стороний код надо было его перенести в проект и следить за багами самому прошли.