Frage Unterschied zwischen assetic: dump und assets: install


In Symfony2, was ist der Unterschied zwischen assetic:dump und assets:install? In welchen Szenarien sollte jeder dieser Befehle verwendet werden und in welcher Reihenfolge (wenn die Reihenfolge relevant ist)?


76
2018-04-04 21:16


Ursprung


Antworten:


Eigentlich schrieb kürzlich darüber in einem Artikel über OroCRM, der auf Symfony 2 basiert. Wenn Sie etwas von dem Kontext / Warum der verschiedenen Befehle möchten, könnten Sie es interessant finden.

Es gibt zwei verschiedene Systeme für die Aufnahme von Frontend-Dateien (Javascript, CSS, Bilder usw.) in einer Symfony-Anwendung. Das assets:install Befehl kam zuerst. Dieser Befehl durchsucht alle Symfony Bundles in einer Anwendung nach einem

Resources/public

Mappe. Wenn gefunden, die assets:install Befehl kopiert oder symbolisiert Dateien von Resources/public zu web/public/bundle/[bundle-name]. Hier werden Links mit dem Zweig erstellt assets Funktion wird nach diesen Dateien suchen. Dies

<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>

Wird dies

<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>

Das ist alles assets System tut es. Sie können Ihre Frontend-Dateien mit dem Bundle speichern.

Das assetic System ist anders. Mit assetic, verlinken Sie auf solche Dateien.

{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

Es gibt ähnliche Tags für Stylesheets und Bilder. Beachte das assetic ermöglicht es Ihnen, auf Dateien in verlinken irgendein bündeln. (@AcmeFooBundle). Mit Assetic können Sie auch mehrere Dateien in einem Ordner mit einem Platzhalter verknüpfen.

{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

Ein weiterer Unterschied mit assetic wird in den Links generiert. In dem dev Umgebung werden sie in etwa so aussehen.

<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>

Das heißt, Anfragen für diese Dateien laufen über den PHP Front Controller (app_dev.php) über spezielle Routen im assetic bündeln. Das heißt, wenn du drin bist dev Modus, Sie müssen nie Ihre Assets auslagern. Sie sind automatisch enthalten. Außerdem können Sie Filter auf die Dateien anwenden. Zum Beispiel gilt das Folgende cssrewrite Filter auf die eingezogenen Dateien.

{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

Wenn Sie jemals die Ausgabe Ihrer Frontend-Assets programmgesteuert ändern wollten -assetic können Sie das tun, indem Sie benutzerdefinierte Zweigfilter schreiben.

Dies ist jedoch leistungsintensiv. In der Produktion sieht das generierte HTML folgendermaßen aus, anstatt jede Datei einzeln über eine PHP-Front-Controller-Datei zu verknüpfen

<script type="text/javascript" src="/js/as5s31l.js"></script>

Wo ist das? as5s31l.js komme aus? Das ist es, was assetic:dump Befehl tut es. Es kombiniert alle einzelnen Javascript / CSS-Dateien (nach dem Anwenden der Filter) und erstellt eine nette, statische, cachefähige Datei für die Produktion.

Was musst du machen

Wenn das Projekt Ihnen nichts anderes sagt, sollten Sie immer laufen assets:install und assetic:dump, weil Sie nie wissen werden, welche Ihrer Pakete von Drittanbietern diese Befehle verwenden. Sie müssen nur laufen assetic:dump bevor Sie die Anwendung bereitstellen oder anzeigen prod Modus. Die Reihenfolge ist irrelevant.

Welches System sollte Ihr Paket verwenden - wenn Sie das oben genannte gelesen haben und sich nicht sicher sind, was assetic kann für dich tun, verwenden assets. Es wird Dir gut gehen.


129
2018-04-05 01:14