Search code examples
symfonyassetsdependency-management

Assetics ou Gassetics?


I just run on Gassetics, seems to be the next gen of SF assets management. So far I used Assetics. One question though : with Assetics I used to split files in order to load only needed one, using Twig parent() method :

{% block scripts %}
   {{ parent() }}
   {% javascripts
       '@LCHAdminBundle/Resources/public/js/jquery.specific.addition.js'
   %}
        <script src="{{ asset_url }}"></script>
   {% endjavascripts %}
{% endblock scripts %}

SO I could add on a specific page, only script needed and so was "forced" (in the noble way) to think and split my twig files accordingly.

Is it possible to do so with Gassetics? I jsut saw that you can specify back-end and front-end files, nothing more.

If I nest Twig files with Gassetic tag, will it do the trick?

EDIT : thanks to Wouter J. comment, I adjust my question : In Assetics you explicitely specify files you want to include, giving the nesting ability. As in Gassetics you just add the tag which will be replaced during CSS/JS file generation, how do you achieve the same?


Solution

  • You can do all of this in the gassetic config (see section yaml example with gassetic.yml in https://github.com/romanschejbal/gassetic).

    Example gassetic.yml:

    js:
        files:
            common.js:
                - assets/vendor/jquery/jquery.js
                - assets/vendor/angular/angular.js
            page1.js:
                - assets/vendor/lchadminbundle/jquery.specific.addition.js
    

    common.html.twig:

    {% block scripts %}
        <!-- prod:common.js --><!-- endbuild -->
    {% endblock scripts %}
    

    page1.html.twig

    {% extends 'common.html.twig' %}
    
    {% block scripts %}
        {{ parent() }}
    
        <!-- prod:page1.js --><!-- endbuild -->
    {% endblock scripts %}
    

    This approach is better than nesting scripts in children templates, since the commonly needed files can be cached between page requests.