एसेंशियल: डंप और एसेट्स के बीच अंतर: इंस्टॉल करें


81

Symfony2 में, के बीच अंतर क्या है assetic:dumpऔर assets:install? इन आदेशों में से प्रत्येक का उपयोग किस परिदृश्य में किया जाना चाहिए, और किस क्रम में (यदि आदेश प्रासंगिक है)?

जवाबों:


138

मैंने वास्तव में इसके बारे में हाल ही में 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। ठीक हो जायेंगे।


11
यह एक शानदार जवाब है, धन्यवाद। मेरा मानना ​​है कि सिम्फनी डॉक्स में कहीं भी भेद नहीं किया गया है, और आपका उत्तर चीजों को साफ करता है।
रिचर्ड केलर

इसे स्पष्ट करने के लिए धन्यवाद। जहां आपने कहा <script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> था कि वास्तव में आपका मतलब क्या है <script type="text/javascript" src="app.php/js/as5s31l.js"></script>
सैम एंथनी

@ सम शायद - हालांकि मेरा मतलब "/js/as5s31l.js" हो सकता है --- लेकिन मुझे याद नहीं है कि सिम्फनी क्या उत्पन्न करती है और परीक्षण के लिए हाथ पर एक सक्रिय परियोजना नहीं है।
एलन स्टॉर्म

इस उत्तर के लिए भी आपका धन्यवाद। यदि फ़ाइलों को परोक्ष रूप से थ्रोट देव फ्रंट कंट्रोलर में परोसा जाता है, तो क्या इसका मतलब यह है कि कोई देव sv में स्कैस फ़ाइलों को प्रोसेस करने के लिए सैस फिल्टर सेट नहीं कर सकता है?
स्टीफन

@ स्टेफ़ेन मैं उस विशिष्ट फ़्रेंडेंड टूलचैन से परिचित नहीं हूँ जिसके बारे में आप बात कर रहे हैं, लेकिन इस प्रणाली के पीछे का विचार यह है कि एससीएसएस प्रसंस्करण को शामिल करने के लिए एसिटिक को संशोधित या विस्तारित किया जा सकता है।
एलन स्टॉर्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.