Pertanyaan Perbedaan antara assetic: dump dan aset: instal


Di Symfony2, apa perbedaannya assetic:dump dan assets:install? Dalam skenario apa masing-masing perintah ini harus digunakan, dan dalam urutan apa (jika order relevan)?


76
2018-04-04 21:16


asal


Jawaban:


saya sebenarnya menulis tentang ini baru-baru ini dalam sebuah artikel tentang OroCRM, yang didasarkan pada Symfony 2. Jika Anda ingin beberapa konteks / mengapa dari perintah yang berbeda, Anda mungkin menganggapnya menarik.

Ada dua sistem yang berbeda untuk menyertakan file frontend (javascript, css, gambar, dll.) Dalam aplikasi Symfony. Itu assets:install perintah datang lebih dulu. Perintah ini akan mencari semua Kumpulan Symfony dalam aplikasi untuk

Resources/public

map. Jika ditemukan, itu assets:install perintah akan menyalin atau file symlink dari Resources/public untuk web/public/bundle/[bundle-name]. Di sinilah tautan dibuat dengan ranting assets fungsi akan mencari file-file ini. Ini

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

Menjadi ini

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

Itu saja assets sistem tidak. Ini memungkinkan Anda menyimpan file frontend Anda dengan bundel.

Itu assetic sistem berbeda. Dengan assetic, Anda menautkan ke file seperti ini.

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

Ada tag serupa untuk stylesheet dan gambar. Perhatikan itu assetic memungkinkan Anda menautkan ke file di apa saja bundel. (@AcmeFooBundle). Asisten juga akan membiarkan Anda menautkan ke beberapa file dalam folder dengan wildcard.

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

Perbedaan lain dengan assetic ada di tautan yang dibuat. Dalam dev lingkungan mereka akan terlihat seperti ini.

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

Artinya, permintaan untuk file-file ini akan dijalankan melalui front controller PHP (app_dev.php) melalui pengaturan rute khusus di assetic bundel. Ini berarti, ketika Anda masuk dev mode, Anda tidak perlu membuang aset Anda. Mereka termasuk secara otomatis. Ini juga memungkinkan Anda untuk menerapkan filter ke file. Sebagai contoh, yang berikut ini berlaku cssrewrite filter ke file yang ditarik.

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

Jika Anda ingin mengubah hasil dari aset frontend Anda secara terprogram -assetic memungkinkan Anda melakukannya dengan menulis filter ranting khusus.

Namun, ini kinerja intensif. Dalam produksi, alih-alih menghubungkan setiap file secara individual melalui file pengontrol depan PHP, HTML yang dihasilkan akan terlihat seperti ini

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

Dimana as5s31l.js berasal dari? Itulah yang terjadi assetic:dump perintah tidak. Saya t menggabungkan semua file javascript / css individu (setelah menerapkan filter) dan membuat file yang bagus, statis, dan dapat di-cache untuk produksi.

Apa yang kamu butuhkan

Kecuali proyek itu secara khusus memberi tahu Anda sebaliknya, Anda harus selalu berlari assets:install dan assetic:dump, karena Anda tidak akan pernah tahu mana bundel pihak ketiga Anda yang menggunakan perintah ini. Anda hanya perlu berlari assetic:dump sebelum Anda menerapkan atau melihat aplikasi di prod mode. Ketertiban tidak relevan.

Adapun sistem yang harus digunakan bundel Anda - jika Anda telah membaca di atas dan Anda tidak yakin apa assetic dapat melakukannya untuk Anda, gunakan assets. Kamu akan baik-baik saja.


129
2018-04-05 01:14