18

के साथ स्क्रिप्ट न्यूनीकरण और निरंतर एकीकरण हाल ही में एक परियोजना पर मैं सी #/एएसपी.नेट में काम कर रहा हूं, मेरे पास कुछ जटिल जावास्क्रिप्ट फाइलें और कुछ निफ्टी स्टाइल शीट हैं। चूंकि ये स्क्रिप्ट संसाधन आकार में बढ़ते हैं is advisable to minify the resources और अपने वेब पृष्ठों को यथासंभव प्रकाश के रूप में रखें। मैं कई डेवलपर्स को जानता हूं जो डिबगिंग के बाद कंप्रेसर में अपने जावास्क्रिप्ट संसाधनों को हाथ से खिलाते हैं और फिर अपने अनुप्रयोगों को तैनात करते हैं।एमएसबिल्ड

जब निरंतर एकीकरण की संतोषजनक दुनिया में स्रोत नियंत्रण और स्वचालित निर्माण की बात आती है (धन्यवाद CruiseControl.NET); हाथ संपीड़न बस नहीं करेगा। स्रोत नियंत्रण बनाए रखने और संपीड़ित संसाधनों को प्रदान करने का एकमात्र तरीका जेएस/सीएसएस स्रोत & को उनके अल्पसंख्यक भाइयों को एक अलग निर्देशिका संरचना में रखना है। फिर संसाधनों के केवल एक सेट या दूसरे को कोड-बैक में पंजीकृत करें। हालांकि, यदि कोई डेवलपर जेएस/सीएसएस स्रोत में बदलाव करता है और फिर इसे फिर से कॉम्पैक्ट करने में विफल रहता है और दोनों संस्करणों में चेक करता है, तो आप कोड-लाइन अब सिंक से बाहर हैं। सुरुचिपूर्ण उल्लेख नहीं है।

मुझे लगता है कि सीसी.NET कार्य ब्लॉक के लिए एक कस्टम निष्पादन योग्य (यदि कोई अभी तक मौजूद नहीं है) लिखना अच्छा लगेगा जो निर्माण कार्य के बाद लक्ष्य निर्देशिका में सभी जावास्क्रिप्ट और सीएसएस संसाधनों को ढूंढ और संकुचित करेगा लेकिन एएसपीनेट को लक्षित करने के लिए प्रकाशित करने से पहले। इस तरह, डेवलपर्स केवल जेएस और सीएसएस स्रोत पर काम करेंगे और उपयोगकर्ताओं को केवल लघु संसाधन मिलेगा।

क्या कोई ऐसा एप्लिकेशन है जो पहले से ही यह कार्य करता है और यदि नहीं, तो CC.NET निष्पादित करने के लिए बिल्ड सर्वर पर किस तरह के संसाधनों को स्थापित करना चाहिए?

(closest question मैं इस एक के लिए यहां मिल सकता है की आवश्यकता NAnt, जो मेरे मामले में एक विकल्प नहीं है।)

संपादित करें: डेव वार्ड अब अपनी साइट पर how to automatically minify in Visual Studio पर एक बड़ा लेख है।

+0

... –

+3

नहीं। मेरा मतलब है minify (http://en.wikipedia.org/wiki/Minify), लेकिन मुझे लगता है कि यह 12 में से एक या एक दर्जन है। मेरा मानना ​​है कि उन दो शर्तों में अंतर-परिवर्तनीय हैं। –

उत्तर

24

MSBuildCommunityTasks Project में कुछ एमएसबिल्ड कार्य हैं जो आप जो कर रहे हैं वह कर सकते हैं जिसमें मर्ज और जेएससीओप्रेस शामिल हैं।

आप इन एमएसबिल्ड परियोजना में इनबिल्ड लक्ष्य में जोड़ सकते हैं ताकि परियोजना हर बार इस क्रिया को निष्पादित करने की अनुमति दे सके और कुछ भी सिंक से बाहर नहीं होगा। आपका वेब एप्लिकेशन तब चलाने के लिए कॉम्पैक्ट संस्करण का संदर्भ दे सकता है लेकिन डेवलपर्स पूर्ण संस्करणों को संपादित करेंगे।

MSBuild समुदाय कार्य असेंबली को छोड़कर सर्वर पर और कुछ भी नहीं चाहिए। आप इस असेंबली को अपने स्रोत पेड़ में रख सकते हैं और वहां से संदर्भ दे सकते हैं और आपके सीआई बिल्ड को उस असेंबली और इसे बनाने के लिए आवश्यक सब कुछ मिलना चाहिए।

+0

अच्छा। मुझें यह पसंद है। –

+2

हे, आश्चर्यजनक है कि मैं इसे आज रात स्टैक ओवरफ्लो में डाल रहा हूं, और Google खोज हमारी साइट बदल गई है! जाने के लिए रास्ता, तो! और अच्छा जवाब, टोड +1 –

+0

मुझे यह जोड़ना होगा कि msbuild कार्य समुदाय प्रोजेक्ट तारकीय है। मैं अपनी निर्माण प्रक्रियाओं में jscompress का उपयोग करता हूं। कृपया ध्यान दें कि आपको jquery.min फ़ाइल को संपीड़न से बाहर छोड़ना होगा क्योंकि यह उस पर चकित होगा। – BozoJoe

4

एक और जे एस (और सीएसएस!) MSBuild के लिए संकुचन लाइब्रेरी:

http://www.codeplex.com/YUICompressor

यह जावा आधारित Yahoo! compressor की एक नेट बंदरगाह है।

+0

अच्छा पता Jarrod। मैं स्वचालित निर्माण में शामिल करने के लिए एक स्वचालित सीएसएस मिनीफाइटर को भी देख रहा हूं। यह एक अच्छा खोज था। –

+0

जारोड, क्या आप लोगों को YUICompressor (ऊपर आपका लिंक) के .NET पोर्ट पर एक और नज़र डालें। कल एक नई रिलीज गिरा दी गई। पिछली बार जब आप लोगों ने एसओ पॉडकास्ट में कहा था कि आपके साथ जांच थी। यह देखना अच्छा लगेगा कि यह बिल्ड आपके तैनाती कार्यक्रम के साथ काम करता है ... और यदि नहीं, तो कृपया क्यों पोस्ट करें/क्या, आदि :) –

1

एक सही उत्तर नहीं है, लेकिन यदि आप एमवीसी 4 का उपयोग कर रहे हैं तो उन्होंने इसे एक नई सुविधा के रूप में बनाया है। डीबग कॉन्फ़िगरेशन चलाते समय, यह अलग-अलग फ़ाइलों को टिप्पणियों के साथ आउटपुट करता है और इस तरह, लेकिन जब आप रिलीज पर स्विच करते हैं, तो यह स्वचालित रूप से मिनीफाइल फ़ाइलों के पृष्ठ संदर्भों में बंडल, मिनीफाई और बदल जाएगा। आप jquery और अपने स्वयं के जेएस के लिए अलग-अलग बंडल सेट कर सकते हैं। यह सीएसएस और जेएस फाइलों के साथ काम करता है।

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

MVC4 आप के लिए काम नहीं करता है, तो आप भी Nuget पर संकुल कि इस जैसे मदद कर सकते हैं पा सकते हैं: कम करें मुझे लगता है कि आप कम से कम मतलब द्वारा

https://www.nuget.org/packages?q=minify

+0

हाँ, 2008 में यह प्रश्न पोस्ट किए जाने के बाद अब और विकल्प हैं। –

संबंधित मुद्दे