Как сделать сборку ресурсов Symfony 2 для разных имен файлов продукта? - PullRequest
15 голосов
/ 18 января 2012

Я следовал руководству в самом низу этой статьи: http://symfony.com/doc/current/cookbook/assetic/asset_management.html

У меня есть этот код:

    {% javascripts
        ...

        output='js/dist/dist.js'
    %}
    <script src="{{ asset_url }}"></script>
    {% endjavascripts %}

Теперь, если я запускаю sf assetic:dump --env=prod, он правильно создает скомпилированный файл. Однако я хотел бы, чтобы он генерировал случайное имя (или метку времени), чтобы избежать проблемы кэширования на стороне клиента. Сейчас он всегда создает файл dist.js, который кэшируется, и когда я обновляю свой код, пользователи не увидят разницы (или не получат ошибки).

Есть ли способ сделать это как dist12345678.js?

Ответы [ 3 ]

8 голосов
/ 18 января 2012

Здесь у вас есть два варианта: либо пропустить имя выходного файла (тогда это будет автоматически сгенерированный хеш, который изменится), либо использовать версии ресурсов, как описано в документации Symfony: http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version

3 голосов
/ 04 апреля 2012

Я много экспериментировал с Assetic для проекта и наткнулся на способ сделать именно то, что вы просите. Если строка «output» содержит «*», то вместо нее подставляется произвольно сгенерированная дермином строка.

Например, у меня есть следующее в шаблоне (PHP, мы не используем веточку):

<?php foreach($view['assetic']->javascripts(array('@MyBundle/Resources/public/js/page.js'), array(), array('output' => 'js/compiled/page_*.js')) as $url): ?>
  <script type="text/javascript" src="<?php echo $view->escape($url) ?>"></script>
<?php endforeach; ?>

<?php foreach($view['assetic']->stylesheets(array('@MyBundle/Resources/public/css/page.css'), array(), array('output' => 'css/compiled/page_*.css')) as $url): ?>
  <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
<?php endforeach; ?>

Когда я запускаю сборку приложения / консоли: dump, она генерирует /web/css/compiled/page_8e8fcb3.css и /web/js/compiled/page_241b4e5.js.

1 голос
/ 22 декабря 2014

Лучший подход https://github.com/symfony/AsseticBundle/pull/119#issuecomment-28877145

Вы получите:

app/console assetic:dump --env=prod --no-debug
Dumping all prod assets.
Debug mode is off.

[file+] /web/assets/static-fe1927d.css
[file+] /web/assets/static-6e92057.js
...