У чому різниця між assetic:dump
і в Symfony2 assets:install
? У яких сценаріях слід використовувати кожну з цих команд і в якому порядку (якщо порядок є актуальним)?
У чому різниця між assetic:dump
і в Symfony2 assets:install
? У яких сценаріях слід використовувати кожну з цих команд і в якому порядку (якщо порядок є актуальним)?
Відповіді:
Я насправді писав про це нещодавно у статті про OroCRM, яка базується на Symfony 2. Якщо ви хочете трохи контексту / чому різні команди, можливо, вам це буде цікаво.
Існує дві різні системи для включення файлів інтерфейсу (javascript, css, зображення тощо) у програму Symfony. assets:install
Команда прийшла першою. Ця команда буде шукати всі пакети Symfony у додатку на наявність
Resources/public
папку. Якщо його буде знайдено, assets:install
команда скопіює файли або символьні посилання з Resources/public
до web/public/bundle/[bundle-name]
. Тут посилання, створені за допомогою assets
функції twig, будуть шукати ці файли. Це
<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
, оскільки ви ніколи не дізнаєтесь, які з ваших сторонніх пакетів використовують ці команди. Вам потрібно запустити лише assetic:dump
перед тим, як розгорнути або переглянути програму в prod
режимі. Порядок не має значення.
Що стосується того, яку систему слід використовувати в наборі - якщо ви прочитали вище і не впевнені, що assetic
можете зробити для вас, скористайтеся assets
. З тобою все буде добре.
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script>
, насправді мали на увазі <script type="text/javascript" src="app.php/js/as5s31l.js"></script>