Різниця між activic: дамп і активами: install


81

У чому різниця між assetic:dumpі в Symfony2 assets:install? У яких сценаріях слід використовувати кожну з цих команд і в якому порядку (якщо порядок є актуальним)?

Відповіді:


138

Я насправді писав про це нещодавно у статті про 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. З тобою все буде добре.


11
Це фантастична відповідь, дякую. Я не вірю, що в документах Symfony ця різниця є де-небудь, і ваша відповідь прояснює ситуацію.
Річард Келлер,

Дякую за роз'яснення. Ви там, де ви заявили <script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> , насправді мали на увазі <script type="text/javascript" src="app.php/js/as5s31l.js"></script>
Сем Ентоні,

@Sam Можливо - хоча я мав на увазі "/js/as5s31l.js" --- Я не пам'ятаю, що створює Symfony, і не маю активного проекту для перевірки.
Алан Сторм,

Дякую також за цю відповідь. Якщо файли подаються індивідуально через фронт-контролер dev, чи означає це, що не можна встановити фільтр sass для обробки файлів scss у dev env?
Stphane

@Stphane Я не знайомий з конкретним фронтенд-ланцюжком інструментів, про який ви говорите, але ідея цієї системи полягає в тому, що актив може бути змінений або розширений, включаючи обробку SCSS.
Алан Сторм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.