Assetic: döküm ve varlıklar arasındaki fark: yükleme


81

Symfony2'de assetic:dumpve arasındaki fark assets:installnedir? Bu komutların her biri hangi senaryolarda ve hangi sırayla kullanılmalıdır (sıra uygunsa)?

Yanıtlar:


138

Aslında bunu yakın zamanda Symfony 2'ye dayanan OroCRM hakkında bir makalede yazmıştım . Farklı komutların bağlamını / nedenini öğrenmek isterseniz, ilginç bulabilirsiniz.

Bir Symfony uygulamasına ön uç dosyalarını (javascript, css, görüntüler, vb.) Dahil etmek için iki farklı sistem vardır. Önce assets:installkomut geldi. Bu komut, bir uygulamadaki tüm Symfony Paketlerini bir

Resources/public

Klasör. Bulduysanız, assets:installkomut kopyalamak veya dosyaları sembolik bir link olacaktır Resources/publiciçin web/public/bundle/[bundle-name]. Twig assetsişlevi ile oluşturulan bağlantıların bu dosyaları arayacağı yer burasıdır . Bu

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

Bu olur

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

Hepsi bu assetssistem yok. Ön uç dosyalarınızı paketle birlikte saklamanıza olanak tanır.

asseticSistem farklıdır. İle asseticbunun gibi dosyalara bağlanırsınız.

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

Stil sayfaları ve resimler için benzer etiketler var. Herhangi bir paketteki asseticdosyalara bağlanmanıza izin veren dikkat edin . ( ). Assetic, bir klasördeki birden çok dosyaya joker karakterle bağlanmanıza da izin verir.@AcmeFooBundle

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

Diğer bir fark, asseticoluşturulan bağlantılardadır. Gelen devçevreye onlar böyle bir şey bakacağız.

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

Yani, bu dosyalara yönelik istekler app_dev.php, asseticpaketteki özel yol ayarları aracılığıyla PHP ön denetleyicisi ( ) aracılığıyla çalıştırılacaktır . Bu, devmoddayken, varlıklarınızı asla terk etmenize gerek olmadığı anlamına gelir . Otomatik olarak dahil edilirler. Ayrıca dosyalara filtre uygulamanıza olanak tanır. Örneğin, aşağıdaki cssrewritefiltre, içeri alınan dosyalara uygulanır .

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

Ön uç varlıklarınızın çıktısını programlı olarak değiştirmek  asseticisterseniz, bunu özel dal filtreleri yazarak yapmanızı sağlar.

Ancak bu, yoğun performans gerektirir. Üretimde, her bir dosyayı ayrı ayrı bir PHP ön denetleyici dosyası aracılığıyla bağlamak yerine, oluşturulan HTML şöyle görünecektir

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

Nereden as5s31l.jsgeliyor? Yani ne assetic:dumpkomut yok. O birleştirir (filtreleri uygulandıktan sonra) tüm bireysel javascript / css dosyaları ve üretim için güzel, statik ön belleğe dosya oluşturur.

Ne yapmak gerekiyor

Proje özellikle aksini söylemedikçe, her zaman çalıştırmalısınız assets:installve assetic:dumpçünkü üçüncü taraf paketlerinizden hangisinin bu komutları kullandığını asla bilemezsiniz. assetic:dumpUygulamayı prodmodda dağıtmadan veya görüntülemeden önce yalnızca çalıştırmanız gerekir . Düzen alakasız.

Paketinizin hangi sistemi kullanması gerektiğine gelince - yukarıdakileri okuduysanız ve sizin için ne asseticyapabileceğinden emin değilseniz, kullanın assets. İyi olacaksın.


11
Bu harika bir cevap, teşekkürler. Symfony belgelerinin herhangi bir yerinde ayrım yapıldığına inanmıyorum ve cevabınız her şeyi açıklığa kavuşturuyor.
Richard Keller

Bunu açıkladığınız için teşekkürler. <script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> Aslında belirttiğiniz yerde gerçekten mi demek istediniz <script type="text/javascript" src="app.php/js/as5s31l.js"></script>
Sam Anthony

@Sam Muhtemelen - "/js/as5s31l.js" demek istemiş olsam da --- Symfony'nin ne ürettiğini hatırlayamıyorum ve test etmek için aktif bir projem yok.
Alan Fırtına

Bu cevap için de teşekkür ederim. Dev ön denetleyicisi aracılığıyla dosyalara ayrı ayrı sunulursa, bu, dev ortamdaki scss dosyalarını işlemek için bir sass filtresi ayarlanamayacağı anlamına mı gelir?
Stphane

@Stphane Bahsettiğiniz belirli ön uç araç zincirine aşina değilim, ancak bu sistemin arkasındaki fikir, assetic'in SCSS işlemeyi içerecek şekilde değiştirilebileceği veya genişletilebileceğidir.
Alan Storm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.