Symfony2 में, के बीच अंतर क्या है assetic:dump
और assets:install
? इन आदेशों में से प्रत्येक का उपयोग किस परिदृश्य में किया जाना चाहिए, और किस क्रम में (यदि आदेश प्रासंगिक है)?
Symfony2 में, के बीच अंतर क्या है assetic:dump
और assets:install
? इन आदेशों में से प्रत्येक का उपयोग किस परिदृश्य में किया जाना चाहिए, और किस क्रम में (यदि आदेश प्रासंगिक है)?
जवाबों:
मैंने वास्तव में इसके बारे में हाल ही में OroCRM के बारे में एक लेख में लिखा था, जो कि सिम्फनी 2 पर आधारित है। यदि आप कुछ संदर्भ चाहते हैं / विभिन्न आदेशों का क्यों, तो आपको यह दिलचस्प लग सकता है।
सिम्फनी एप्लिकेशन में फ्रंटएंड फाइल्स (जावास्क्रिप्ट, सीएसएस, इमेज आदि) के लिए दो अलग-अलग सिस्टम हैं। assets:install
आदेश पहले आया था। यह कमांड एक के लिए एक आवेदन में सभी सिम्फनी बंडलों की खोज करेगा
Resources/public
फ़ोल्डर। तो मिल गया है, assets:install
आदेश की प्रतिलिपि बनाने या से फाइल सिमलिंक जाएगा Resources/public
करने के लिए web/public/bundle/[bundle-name]
। यह वह जगह है जहां टहनी assets
फ़ंक्शन के साथ बनाए गए लिंक इन फ़ाइलों की तलाश करेंगे। यह
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
बन जाता है
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
यही सब assets
सिस्टम करता है। यह आपको बंडल के साथ अपनी फ्रंटएंड फ़ाइलों को संग्रहीत करने देता है।
assetic
प्रणाली अलग है। इसके साथ assetic
, आप फ़ाइलों को इस तरह से लिंक करते हैं।
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
स्टाइलशीट और छवियों के लिए समान टैग हैं। सूचना जो assetic
आपको किसी भी बंडल में फ़ाइलों से लिंक करने की अनुमति देती है। ( @AcmeFooBundle
)। एसेटिक आपको वाइल्डकार्ड वाले फ़ोल्डर में कई फ़ाइलों से लिंक करने देगा।
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
के साथ एक और अंतर assetic
उत्पन्न लिंक में है। में dev
पर्यावरण वे कुछ इस तरह दिखाई देंगे।
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
यही है, इन फ़ाइलों के लिए अनुरोध PHP फ्रंट कंट्रोलर ( app_dev.php
) assetic
बंडल में विशेष मार्गों सेटअप के माध्यम से चलेंगे । इसका मतलब है, जब आप dev
मोड में होते हैं, तो आपको कभी भी एसेट्स डंप करने की आवश्यकता नहीं होती है। वे स्वचालित रूप से शामिल हैं। यह आपको फ़ाइलों को फ़िल्टर लागू करने की भी अनुमति देता है। उदाहरण के लिए, निम्न cssrewrite
फ़िल्टर को खींची गई फ़ाइलों पर लागू होता है।
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
यदि आप कभी भी अपने फ्रंटएंड एसेट्स के आउटपुट को प्रोग्रामेटिक रूप से बदलना चाहते हैं - assetic
तो आप कस्टम ट्विग फिल्टर्स लिखकर ऐसा कर सकते हैं।
हालाँकि, यह प्रदर्शन गहन है। उत्पादन में, PHP फ्रंट कंट्रोलर फ़ाइल के माध्यम से प्रत्येक फ़ाइल को व्यक्तिगत रूप से लिंक करने के बजाय, उत्पन्न HTML इस तरह दिखेगा
<script type="text/javascript" src="/js/as5s31l.js"></script>
कहाँ as5s31l.js
से आता है? वही assetic:dump
काम करता है। यह सभी व्यक्तिगत जावास्क्रिप्ट / सीएसएस फ़ाइलों (फिल्टर को लागू करने के बाद) को जोड़ती है और उत्पादन के लिए एक अच्छी, स्थिर, उपलब्ध फाइल बनाता है।
जब तक कि परियोजना विशेष रूप से आपको अन्यथा नहीं बताती है, आपको हमेशा चलना चाहिए assets:install
और assetic:dump
, क्योंकि आप कभी नहीं जान पाएंगे कि आपके तीसरे पक्ष के बंडलों में से कौन सी कमांड का उपयोग करता है। मोड assetic:dump
में एप्लिकेशन को परिनियोजित करने या देखने से पहले आपको केवल चलाने की आवश्यकता prod
है। आदेश अप्रासंगिक है।
किस सिस्टम के लिए आपके बंडल का उपयोग किया जाना चाहिए - यदि आपने ऊपर पढ़ा है और आप अनिश्चित हैं कि assetic
आपके लिए क्या कर सकते हैं, उपयोग करें assets
। ठीक हो जायेंगे।
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script>
था कि वास्तव में आपका मतलब क्या है <script type="text/javascript" src="app.php/js/as5s31l.js"></script>