В Symfony2, в чем разница между assetic:dump
и assets:install
? В каких сценариях должна использоваться каждая из этих команд и в каком порядке (если порядок имеет значение)?
Разница между усминой: дамп и активы: установить
Ответ 1
Я на самом деле писал об этом недавно в статье об OroCRM, которая основана на Symfony 2. Если вам нужен какой-то контекст/почему разные команды, вам может показаться интересным.
В приложении Symfony есть две различные системы для включения файлов frontend (javascript, css, images и т.д.). Сначала была команда assets:install
. Эта команда будет искать все пакеты Symfony в приложении для
Resources/public
папка. Если найдено, команда assets:install
будет копировать или символические файлы с Resources/public
до web/public/bundle/[bundle-name]
. Здесь ссылки, созданные с помощью функции twig assets
, будут искать эти файлы. Это
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Становится этим
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
Что делает система assets
. Он позволяет хранить ваши файлы интерфейса вместе с пакетом.
Система assetic
отличается. С помощью assetic
вы ссылаетесь на такие файлы.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Там похожие теги для таблиц стилей и изображений. Обратите внимание, что assetic
позволяет вам ссылаться на файлы в любом комплекте. (@AcmeFooBundle
). Assetic также позволит вам ссылаться на несколько файлов в папке с подстановочным знаком.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Другое различие с assetic
заключается в генерируемых ссылках. В среде dev
они будут выглядеть примерно так.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
То есть запросы на эти файлы будут выполняться через фронт-контроллер PHP (app_dev.php
) с помощью специальной настройки маршрутов в пакете assetic
. Это означает, что когда вы находитесь в режиме dev
, вам никогда не нужно сбрасывать активы. Они включаются автоматически. Он также позволяет применять фильтры к файлам. Например, ниже применяется фильтр cssrewrite
к вложенным файлам.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Если вы когда-либо хотели программным образом изменить выходные данные ваших внешних компонентов - assetic
позволяет вам это сделать, написав пользовательские фильтры ветки.
Однако это интенсивно работает. В производстве вместо того, чтобы связывать каждый файл отдельно через файл переднего контроллера PHP, сгенерированный HTML будет выглядеть следующим образом:
<script type="text/javascript" src="/js/as5s31l.js"></script>
Откуда as5s31l.js
? Это то, что делает команда assetic:dump
. Он объединяет все отдельные файлы javascript/css (после применения фильтров) и создает хороший, статический, кэшируемый файл для производства.
Что вам нужно сделать
Если в проекте конкретно не указано иное, вы всегда должны запускать assets:install
и assetic:dump
, потому что вы никогда не узнаете, какие из ваших сторонних пакетов используют эти команды. Перед развертыванием или просмотром приложения в режиме prod
вам нужно запустить assetic:dump
. Заказ не имеет значения.
Что касается системы, которую должен использовать ваш пакет - если вы прочитали выше, и вы не знаете, что assetic
может сделать для вас, используйте assets
. Вам будет хорошо.