Question

I followed the guide on the very bottom of this article: http://symfony.com/doc/current/cookbook/assetic/asset_management.html

I have this code:

    {% javascripts
        ...

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

Now if I run sf assetic:dump --env=prod it creates the compiled file properly. However, I would like to have it generating a random name (or timestamped) so that the client-side browser cache problem is avoided. Right now it always creates dist.js file which gets cached and when I update my code the users won't see the difference (or get errors).

Is there a way to make it like dist12345678.js?

Was it helpful?

Solution

You have two options here: Either leave out the output file name (it will then be an autogenerated hash that changes) or use asset versions, as described in the Symfony docs: http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version

OTHER TIPS

I have been doing a lot of experimenting with Assetic for a project, and I stumbled across a way to do exactly what you're asking. If the "output" string contains "*", a derministically generated arbitrary string is substituted for it.

For example, I have the following in a template (PHP, we aren't using twig):

<?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; ?>

When I run app/console assetic:dump, it generates /web/css/compiled/page_8e8fcb3.css and /web/js/compiled/page_241b4e5.js.

Better approach is https://github.com/symfony/AsseticBundle/pull/119#issuecomment-28877145

You'll get :

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top