27

क्या Asp.Net MVC4 बंडलिंग & खनन सुविधा को अनुकूलित करने का कोई तरीका है जेएस फाइलों को कम करता है?एमवीसी 4 बंडलिंग, मिनीफिकेशन और एंगुलरजेएस सेवाएं

मतलब, मैं पूरी तरह से खनन को बंद नहीं करना चाहता, लेकिन "जैसा है" यह सिर्फ AngularJs को तोड़ देता है।

AngularJS के बाद से नियंत्रकों में सेवाएं इंजेक्शन लगाने के लिए डि और आईओसी दृष्टिकोण का उपयोग करता है, तो निम्न:

function MyController($scope) { } 

एक बार न्यूनतम किया गया, हो जाता है: कि एक समस्या नहीं होगी

function MyController(n) { } 

आम तौर पर, लेकिन AngularJS इंजेक्ट करने के लिए कौन सी सेवा समझने के लिए पैरामीटर नामों का उपयोग करता है। तो $ गुंजाइश $ गुंजाइश, साथ ही साथ कोणीय नियंत्रकों में किसी भी अन्य पैरामीटर रहना चाहिए। बाकी सब कुछ, जैसे स्थानीय चर, आदि, सामान्य रूप से कम किया जाना चाहिए।

मुझे एमवीसी 4 खनन को कॉन्फ़िगर करने के तरीके पर कोई स्पष्ट दस्तावेज नहीं मिल रहा है, और ऐसा लगता है कि यह "सब कुछ या कुछ नहीं" के लिए गूंगा लगता है, इसलिए मुझे लगता है कि मुझे कुछ याद आ रहा है।

धन्यवाद।

+0

तकनीकी रूप से http://stackoverflow.com/questions/13032721/system-web-optimization-making-function-argument-names-stay-the-same-for-certain का डुप्लिकेट, हालांकि मुझे नहीं लगता कि जवाब समझ में आता है। – drzaus

+0

यह प्रश्न http://stackoverflow.com/questions/17410012/customizing-net-4-5-bundler-minifier – drzaus

उत्तर

45

असल में आप AngularJS कोड लिख सकते हैं (और चाहिए!) तो यह "छोटाकरण सुरक्षित" है। विवरण http://docs.angularjs.org/guide/di की "निर्भरता एनोटेशन" खंड में लेकिन संक्षेप में वर्णन किया गया है, विश्व स्तर पर परिभाषित नियंत्रकों के लिए आप लिख सकते हैं:

MyController.$inject = ['$scope'];

कृपया ध्यान दें कि विश्व स्तर पर परिभाषित नियंत्रकों ग्लोबल नेमस्पेस को दूषित कर रहे हैं (अधिक जानकारी के लिए this देखें) और इससे बचा जाना चाहिए। आप एक मॉड्यूल स्तर पर एक नियंत्रक की घोषणा यदि आप कर सकते हैं यह minification सुरक्षित रूप में अच्छी तरह:

angular.module('mymodule', []).controller('MyController', ['$scope', function($scope){ 
//controller code goes here 
}]); 
+1

द्वारा भी डुप्लिकेट किया गया वैश्विक नामस्थान प्रदूषण एक और समस्या थी जिसे मैं जल्द ही संबोधित करने जा रहा था, इसलिए ऐसा लगता है कि आपका समाधान है शास्त्रीय "एक पत्थर के साथ दो पक्षियों"। धन्यवाद। –

+0

धन्यवाद !!! यह मेरे लिए काम करता है :) –

1

अगर आप अभी भी कम करें और क्या नहीं करने के लिए क्या (नियंत्रित करने के लिए चाहते हैं या आप से एक पहले से ही न्यूनतम किया गया संस्करण शामिल करना चाहते हैं प्लगइन विक्रेता) सिर्फ दो बंडलों ऐलान करते हैं और केवल अपने BundleConfig.cs पर उनमें से एक कम करें:

var dontMinify = new Bundle("~/bundles/toNotMinify").Include(
         "~/Scripts/xxxxx.js"); 
bundles.Add(dontMinify); 

var minify = new Bundle("~/bundles/toNotMinify").Include(
         "~/Scripts/yyyyyy.js"); 
minify.Transforms.Add(new JsMinify()); 
bundles.Add(minify); 
+3

मुझे लगता है कि आप रिवर्स का मतलब है - आपको 'dontMinify.Transforms.Clear() 'के साथ minify ट्रांसफ़ॉर्म को स्पष्ट रूप से निकालना होगा। – drzaus

1

आप में से जो कि कौन नहीं चाहता के लिए/"minification सुरक्षित लिखने के लिए arsed नहीं किया जा सकता है "कोणीय-डी वाक्यविन्यास, और परिवर्तनीय नामों को अपरिवर्तित होने की परवाह नहीं है, मैंने यूई जेएस मिनीफायर के साथ बंडलट्रांसफॉमर का उपयोग किया - न्यूजेट के माध्यम से उपलब्ध:

Install-Package BundleTransformer.Core 
Install-Package BundleTransformer.Yui 

खनन/obfuscation पर बहुत बढ़िया नियंत्रण देता है। कोणीय दुनिया में, बस yui web.config खंड में गलत पर obfuscateJavascript सेट करें।

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