Jaka jest różnica między assetic:dump
i w Symfony2 assets:install
? W jakich scenariuszach powinno być używane każde z tych poleceń i w jakiej kolejności (jeśli kolejność ma znaczenie)?
Jaka jest różnica między assetic:dump
i w Symfony2 assets:install
? W jakich scenariuszach powinno być używane każde z tych poleceń i w jakiej kolejności (jeśli kolejność ma znaczenie)?
Odpowiedzi:
Właściwie pisałem o tym niedawno w artykule o OroCRM, który jest oparty na Symfony 2. Jeśli chcesz poznać kontekst / dlaczego różnych poleceń, może to Cię zainteresować.
Istnieją dwa różne systemy włączania plików frontendu (javascript, css, obrazy itp.) Do aplikacji Symfony. assets:install
Komendy przyszedł pierwszy. To polecenie przeszuka wszystkie pakiety Symfony w aplikacji pod kątem pliku
Resources/public
teczka. Jeśli zostanie znalezione, assets:install
polecenie skopiuje pliki lub dowiązania symboliczne z Resources/public
do web/public/bundle/[bundle-name]
. W tym miejscu linki utworzone za pomocą assets
funkcji twig będą szukać tych plików. To
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Staje się tym
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
To wszystko assets
, co robi system. Pozwala na przechowywanie plików frontendu w pakiecie.
assetic
System jest inny. Za pomocą assetic
łączysz do takich plików.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Istnieją podobne tagi dla arkuszy stylów i obrazów. Zauważ, że assetic
umożliwia tworzenie linków do plików w dowolnym pakiecie. ( @AcmeFooBundle
). Assetic umożliwia także tworzenie linków do wielu plików w folderze za pomocą symbolu wieloznacznego.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Kolejna różnica assetic
dotyczy generowanych linków. W dev
środowisku będą wyglądać mniej więcej tak.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
Oznacza to, że żądania dotyczące tych plików będą przechodzić przez przedni kontroler PHP ( app_dev.php
) za pośrednictwem specjalnych tras skonfigurowanych w assetic
pakiecie. Oznacza to, że gdy jesteś w dev
trybie, nigdy nie musisz porzucać swoich zasobów. Są dołączane automatycznie. Umożliwia także stosowanie filtrów do plików. Na przykład poniższa procedura stosuje cssrewrite
filtr do pobieranych plików.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Jeśli kiedykolwiek chciałeś programistycznie zmienić dane wyjściowe swoich zasobów frontendu - assetic
możesz to zrobić, pisząc niestandardowe filtry gałązek.
Jednak wymaga to dużej wydajności. W środowisku produkcyjnym, zamiast łączyć każdy plik osobno przez plik kontrolera frontowego PHP, wygenerowany kod HTML będzie wyglądał następująco
<script type="text/javascript" src="/js/as5s31l.js"></script>
Skąd się as5s31l.js
bierze? To właśnie assetic:dump
robi polecenie. To łączy wszystkie pojedyncze pliki javascript / css (po zastosowaniu filtrów) i tworzy piękny, statyczny, Cacheable plik do produkcji.
O ile projekt nie mówi inaczej, zawsze powinieneś uruchamiać assets:install
i assetic:dump
, ponieważ nigdy nie wiesz, który z pakietów stron trzecich używa tych poleceń. Musisz tylko uruchomić assetic:dump
przed wdrożeniem lub wyświetleniem aplikacji w prod
trybie. Porządek nie ma znaczenia.
Jeśli chodzi o system, którego powinien używać Twój pakiet - jeśli przeczytałeś powyższe i nie masz pewności, co assetic
może dla Ciebie zrobić, użyj assets
. Wydobrzejesz.
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script>
czy faktycznie miałeś na myśli <script type="text/javascript" src="app.php/js/as5s31l.js"></script>