কীভাবে কার্যকরকরণ নিষ্ক্রিয় করবেন এএসপি.নেট বান্ডিলগুলি


185

আমি debug="true"আমার ওয়েবকনফিগ (গুলি) উভয়েই পেয়েছি এবং আমি কেবল আমার বান্ডিলগুলি খাটো করতে চাই না, তবে আমি যা কিছু করি তা এটি অক্ষম করে না বলে মনে হয়। আমি চেষ্টা করেছি enableoptimisations=false, এখানে আমার কোড:

//Javascript
bundles.Add(new ScriptBundle("~/bundles/MainJS")
            .Include("~/Scripts/regular/lib/mvc/jquery.validate.unobtrusive.js*")
            .Include("~/Scripts/regular/lib/mvc/jquery.validate*")
            .Include("~/Scripts/regular/lib/bootstrap.js")
            .IncludeDirectory("~/Scripts/regular/modules", "*.js", true)
            .IncludeDirectory("~/Scripts/regular/pages", "*.js", true)
            .IncludeDirectory("~/Scripts/regular/misc", "*.js", true));

//CSS
bundles.Add(new StyleBundle("~/bundles/MainCSS")
            .Include("~/Content/css/regular/lib/bootstrap.css*")
            .IncludeDirectory("~/Content/css/regular/modules", "*.css", true)
            .IncludeDirectory("~/Content/css/regular/pages", "*.css", true))

2
@ রিকএন্ড-এমএসএফটি অনুরোধটি হ'ল মিনিফিকেশন অক্ষম থাকার সময় কীভাবে বান্ডিলিং সক্ষম করবেন। ওয়েবকনফিগ ডিবাগ = সত্য / মিথ্যা বা সক্ষমঅપ્টিমাইজেশন ব্যবহার করে কেবল উভয়ই চালু বা বন্ধ করা যায়। মার্টিন ডেভিলারদের উত্তর মিনিফিকেশন অক্ষম থাকাকালীন বান্ডিলিং সক্ষম করতে দেয়
জিমিড

2
আমার জন্যও .... বান্ডেলের 'x.js' ফাইলের জন্য এটি নিশ্চিত করুন যে ফোল্ডারে কোনও 'x.min.js' ফাইল নেই অন্যথায় যদিও আপনি মিনিফিকেশন ট্রান্সফর্মেশন সরিয়ে রেখেছেন .. বান্ডিলিংটি কাজ করবে 'প্রাক' মিনিফাইন্ড করা ফাইল যেমন আপনার 'অ্যাঙ্গুলার.জেএস' থাকে তবে 'অ্যাঙ্গুলার.মিন.জেএস' ডিলিট করুন ;-)
স্টুবু

উত্তর:


137

আপনি যদি debug="true"web.config এবং ব্যবহার করছেন Scripts/Styles.Renderআপনার পাতায় থোকায় থোকায় রেফারেন্স, উভয় Bundling এবং minification বন্ধ করা উচিত নয়। BundleTable.EnableOptimizations = falseসর্বদা পাশাপাশি বান্ডলিং এবং মিনিফিকেশন উভয়ই বন্ধ করে দেবে (ডিবাগ সত্য / মিথ্যা পতাকা নির্বিশেষে)।

আপনি সম্ভবত Scripts/Styles.Renderসাহায্যকারীদের ব্যবহার করছেন না ? আপনি যদি সরাসরি বান্ডেলের মাধ্যমে রেফারেন্সগুলি উপস্থাপন করেন তবে BundleTable.Bundles.ResolveBundleUrl()আপনি সর্বদা সংক্ষিপ্ত / বান্ডিলযুক্ত সামগ্রী পাবেন।


12
এই উত্তরটি থেকে, আমি নিশ্চিত না যে কীভাবে কেবল মিনিফিকেশন বন্ধ করবেন এবং স্থানে বান্ডিলিং ছেড়ে যাবেন - এটি কি সম্ভব?
অ্যাডাম টিউলিপার - এমএসএফটি

33
এটি করার জন্য, সবচেয়ে সহজ হ'ল স্ক্রিপ্ট / স্টাইলবান্ডেলগুলি সরল বান্ডিলগুলির জন্য বদলে ফেলা উচিত যার ডিফল্টরূপে কোনও রূপান্তর সেট নেই, এটি মিনিফিকেশন বন্ধ করে দেবে তবে এখনও বান্ডিল করবে। নোট করুন যে বান্ডিল হওয়ার জন্য আপনার তখনও সক্ষম অপ্টিমাইজেশানগুলি সত্যতে সেট করতে হবে।
হাও কুং

2
আমার জন্যও .... বান্ডেলের 'x.js' ফাইলের জন্য এটি নিশ্চিত করুন যে ফোল্ডারে কোনও 'x.min.js' ফাইল নেই অন্যথায় যদিও আপনি মিনিফিকেশন ট্রান্সফর্মেশন সরিয়ে রেখেছেন .. বান্ডিলিংটি কাজ করবে 'প্রাক' মিনিফাইন্ড করা ফাইল যেমন আপনার 'অ্যাঙ্গুলার.জেএস' থাকে তবে 'অ্যাঙ্গুলার.মিন.জেস' মুছে ফেলুন ;-)
স্টুবু

1
@stooboo এটি আমার জন্য এটি স্থির করেছে, তবে আপনাকে কোনও কিছুই মুছতে হবে না। নন-মিনিট ফাইলটি কেবল অন্তর্ভুক্ত করুন।
OneHoopyFrood

2
EnableOptimizations = false- এই কোডটি কোথায় সম্পর্কিত?
অ্যালেক্স

157

শর্তসাপেক্ষ সংকলনের নির্দেশাবলী আপনার বন্ধু:

#if DEBUG
            var jsBundle = new Bundle("~/Scripts/js");
#else
            var jsBundle = new ScriptBundle("~/Scripts/js");
#endif

16
আসলে আমি মনে করি সে এটি পেরেক করেছে - স্রেফ মিনিফিকেশন বন্ধ করতে, হাও অনুযায়ী একটি বান্ডিল ব্যবহার করুন, নইলে স্ক্রিপ্টবান্ডেলটি ব্যবহার করুন যা কোন বান্ডিল এবং মিনিফাইস করে, না?
অ্যাডাম টিউলিপার - এমএসএফটি

1
এটি প্রয়োজনীয় সমাধানের সময় যখন আপনি বান্ডেলটিকে তার বান্ডেল রেফারেন্স ইউআরআই দ্বারা রেফারিজজেএসের নিজস্ব বান্ডিলিং / মিনিফিকেশন সিস্টেমটি ব্যবহার না করে লোড করার মতো জিনিসের জন্য উল্লেখ করতে চান।
নরম্যান এইচ

1
আমি অ্যাডামের মতো জিনিস দেখতে পাচ্ছি, আমি স্ক্রিপ্টবান্ডলকে বর্ধিত বান্ডিল হিসাবে বুঝতে পেরেছি, সুতরাং যেহেতু আপনি একটি প্রাথমিক রেফারেন্স যুক্ত করতে চান (কোনও নির্দিষ্ট পোস্ট-অপারেশন নেই), তাই বান্ডেল আমার কাছে একটি নির্দিষ্ট বান্ডেলে সংশোধন নিষ্ক্রিয় করার একটি ভাল উপায় বলে মনে হয়।
চার্লস HETIER

6
@ রিকঅ্যান্ড-এমএসএফটি আমার মনে হয় আপনি এই কোডটির উদ্দেশ্য সম্পর্কে ভুল বোঝাবুঝি করছেন যা বান্ডিলিং + ডিবাগ মোডে কোনও ক্ষুদ্রকরণ এবং রিলিজ মোডে বান্ডিলিং + মিনিফিকেশনের অনুমতি দেয়। ওয়েবকনফিগ ডিবাগ = সত্য / মিথ্যা বা সক্ষমঅપ્টিমাইজেশন ব্যবহার করে কেবল উভয়ই চালু বা বন্ধ করা যায়। আমি আপনার মন্তব্য পড়েছি এবং এই মার্টিনের সমাধানটি খারিজ করে দিয়েছি, কেবল এটি নির্ধারণের ছাড়াই বান্ডিলিংয়ের পক্ষে খুব ভাল উপায়
জিমিড

-1 এই "সমাধান" সেরা স্টপ-গ্যাপ gap বাস্তবে, যদিও এটি কাজ করে এটি অত্যন্ত অনিচ্ছাকৃত কোডের দিকে নিয়ে যায়। তবে এটি সম্পর্কে সবচেয়ে খারাপ জিনিস নয়। "বান্ডেল" ব্যবহার করে মাইম-টাইপ সেটটি "পাঠ্য / জাভাস্ক্রিপ্ট" এর পরিবর্তে "পাঠ্য / এইচটিএমএল" এ সেট করে সার্ভারের হাতে সম্পদ হস্তান্তরিত হয়। আপনি যদি সিএসএস ফাইলগুলি বান্ডিল করার জন্য এই পদ্ধতির প্রয়োগ করেন তবে আপনি ডিবাগ মোডে থাকা অবস্থায় আগুনের সাথে খেলছেন। না। শুধু না। আরও সুস্থ পদ্ধতির জন্য আমার উত্তরটি দেখুন যা উত্পাদন তৈরিতে কাজ করে।
এক্সডিএস

89

বান্ডেলিং অক্ষম করুন এবং minification করার জন্য শুধু এটি আপনার করা .aspx ফাইল (এই ইচ্ছার নিষ্ক্রিয় অপ্টিমাইজেশান এমনকি যদি debug=trueweb.config )

vb.net:

System.Web.Optimization.BundleTable.EnableOptimizations = false

C # .net

System.Web.Optimization.BundleTable.EnableOptimizations = false;

আপনি যদি এটি রাখেন EnableOptimizations = trueতবে debug=trueএটি ওয়েবকনফাইগে থাকলেও এটি বান্ডিল হবে এবং মাইনাইফ করবে


2
এটিই আমার জন্য সমস্যাটি স্থির করেছে। আমার ছিল debug="true"এবং সঠিক Script.Renderকিন্তু এটি এখনও কাজ করে না। এছাড়াও নোট করুন যে এটি কোনও .min.js ফাইলগুলিকে সার্ভার করবে না, তাই নির্ভরতা কোডের আনমিনাইড কপিগুলি অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন।
ওয়ানহোপি ফ্রিড

2
@ টিসিসি: আমি কী ভেবে ভূল করছি যে ভিবি.net সিনট্যাক্সের মূলধন থাকা উচিত False?
21: 21 এ জেরেমেসউইজ

@ জেরেমিসওয়াইফ ওহ হ্যাঁ আমি এটিকে সঠিক বলে মনে করি, ভাল পয়েন্ট :-) আমি প্রায়শই ভিবি প্রোগ্রামার নই তাই আমি খেয়ালও করি না ...
টিসিসি

1
প্রথম লাইনটি "... এমনকি ডিবাগ = মিথ্যা" না হওয়া উচিত?
ইউনিয়নপি

2
vb.Net কেস সম্পর্কে মিথ্যা কথা বলছে না, মিথ্যা = মিথ্যা, পছন্দ .টাস্ট্রিং () = .আর স্ট্রিং ()
ম্যানুয়েল

67

আপনি কেবল আপনার রূপান্তরগুলি সাফ করে আপনার বান্ডিলগুলিতে মিনিফিকেশন বন্ধ করতে পারেন।

var scriptBundle = new ScriptBundle("~/bundles/scriptBundle");
...
scriptBundle.Transforms.Clear();

আমার ব্যক্তিগত স্ক্রিপ্টগুলি একটি একক ফাইলে বান্ডিল করতে চাইলেও ব্যক্তিগতভাবে ডিবাগিংয়ের সময় পঠনযোগ্যতার প্রয়োজনে এই দরকারীটি পেয়েছি।


-1 এখানে ড্রাগন থাকুন: জেসমিনিফায়ার / সিএসএসমিনিফায়ারটি ছড়িয়ে দেওয়া অভ্যন্তরীণ প্রক্রিয়াটিও ছিন্ন করে দেয় যা মাইম-টাইপটিকে "পাঠ্য / সিএসএস" বা "পাঠ্য / জাভাস্ক্রিপ্ট" এ সেট করে। এটি ডিবাগ / রিলিজ মোডে সমস্যা সৃষ্টি করে না তবে এটি প্রকাশিত বিল্ডস (ওরফে লাইভ ডিপ্লোয়মেন্টস) এর প্রসঙ্গে সিএসএস-বান্ডলে বিধ্বস্ত করেছে: ক্রোম এবং ফায়ারফক্স সিএসএস-বান্ডিলগুলি লোড করতে অস্বীকার করে জানিয়েছে যে তাদের মাইম-প্রকার সেট রয়েছে "পাঠ্য / এইচটিএমএল" "পাঠ্য / সিএসএস" এর পরিবর্তে। জেএস-বান্ডিলগুলির জিনিসগুলি কোনওরকমভাবে ওয়ার্কআউট করে তবে একটি জেএস-বান্ডিলকে "পাঠ্য / এইচটিএমএল" (<- সিরিয়াসলি?) হিসাবে হস্তান্তর করা তার সর্বোত্তম fish সঠিক পদ্ধতির জন্য আমার উত্তর দেখুন।
এক্সডিএস

27

আমি এই পরামর্শগুলির অনেক চেষ্টা করেছি তবে মনে হচ্ছে এটি কাজ করছে। আমি বেশ কয়েক ঘন্টা নষ্ট করেছি কেবল এটি জানতে যে এটি আমার ভুল ছিল:

@Scripts.Render("/bundles/foundation")

এটি সর্বদা আমাকে মাইনাইফ করে এবং জাভাস্ক্রিপ্ট বান্ডিল করেছে, আমি যা চেষ্টা করি তা নয়। পরিবর্তে, আমার এটি ব্যবহার করা উচিত ছিল:

@Scripts.Render("~/bundles/foundation")

অতিরিক্ত '~' এটি করেছে। এমনকি আমি এটি কেবলমাত্র একবারেই সরিয়ে দিয়েছি তা দেখার জন্য এটি সত্যিই ছিল কিনা। এটি ছিল ... আশা করি আমি এতে যে ঘন্টা নষ্ট করেছি তা কমপক্ষে একজনকে বাঁচাতে পারি।


24

বেশ কয়েকটি উত্তর একত্রিত করুন, এটি এএসপি.নেট এমভিসি 4 এ আমার জন্য কাজ করে।

        bundles.Add(new ScriptBundle("~/Scripts/Common/js")
            .Include("~/Scripts/jquery-1.8.3.js")
            .Include("~/Scripts/zizhujy.com.js")
            .Include("~/Scripts/Globalize.js")
            .Include("~/Scripts/common.js")
            .Include("~/Scripts/requireLite/requireLite.js"));

        bundles.Add(new StyleBundle("~/Content/appLayoutStyles")
            .Include("~/Content/AppLayout.css"));

        bundles.Add(new StyleBundle("~/Content/css/App/FunGrapherStyles")
            .Include("~/Content/css/Apps/FunGrapher.css")
            .Include("~/Content/css/tables.css"));

#if DEBUG
        foreach (var bundle in BundleTable.Bundles)
        {
            bundle.Transforms.Clear();
        }
#endif

21

ম্যানিফিকেশন ম্যানিফিকেশন (এবং অন্যান্য বৈশিষ্ট্যগুলি) নিয়ন্ত্রণ করার কিছু সহজ উপায়ও রয়েছে। এটি এর মতো নতুন সিএসএমিনিফাই () ট্রান্সফর্মার ব্যবহার করে:

// this is in case when BundleTable.EnableOptimizations = false;
var myBundle = new StyleBundle("~/Content/themes/base/css")
    .Include("~/Content/themes/base/jquery.ui.core.css" /* , ... and so on */);
myBundle.Transforms.Add(new CssMinify());
bundles.Add(myBundle);

// or you can remove that transformer in opposite situation
myBundle.Transforms.Clear();

আপনি যখন কিছু বান্ডিলের বিশেষ অংশটি কেবলমাত্র খাটো করতে চান তবে এটি সুবিধাজনক। ধরা যাক, আপনি কয়েকটি স্ট্যান্ডার্ড (jQuery) শৈলী ব্যবহার করছেন যা আপনার পায়ের নীচে পাচ্ছে (তাদের কাছে প্রচুর অতিরিক্ত ব্রাউজারের অনুরোধ নিচ্ছে), তবে আপনি নিজের স্টাইলশীটটি অবিচ্ছিন্ন রাখতে চান। (একই - জাভাস্ক্রিপ্ট সহ)।


13

আমি এই প্রশ্নে অন্যদের দেওয়া কয়েকটি উত্তর একত্রিত করে অন্য একটি বিকল্প সমাধান নিয়ে এসেছি।

লক্ষ্য: সবসময় ফাইলগুলিকে বান্ডিল করতে, ইভেন্টে জেএস এবং সিএসএসের মিনিফিকেশন অক্ষম করতে<compilation debug="true" ... /> সর্বদা একটি কাস্টম রূপান্তর প্রয়োগ করতে।

আমার সমাধান :

1) ওয়েবকনফিগে : <compilation debug="true" ... />

2) গ্লোবাল.এক্সএক্স অ্যাপ্লিকেশন_স্টার্ট () পদ্ধতিতে:

 protected void Application_Start() {
     ...
     BundleTable.EnableOptimizations = true; // Force bundling to occur

     // If the compilation node in web.config indicates debugging mode is enabled
     // then clear all transforms. I.e. disable Js and CSS minification.
     if (HttpContext.Current.IsDebuggingEnabled) {
         BundleTable.Bundles.ToList().ForEach(b => b.Transforms.Clear());
     }

      // Add a custom CSS bundle transformer. In my case the transformer replaces a
      // token in the CSS file with an AppConfig value representing the website URL
      // in the current environment. E.g. www.mydevwebsite in Dev and
      // www.myprodwebsite.com in Production.
      BundleTable.Bundles.ToList()
          .FindAll(x => x.GetType() == typeof(StyleBundle))
          .ForEach(b => b.Transforms.Add(new MyStyleBundleTransformer()));
     ...
}

7

আপনি যদি নীচের সম্পত্তিটিকে মিথ্যাতে সেট করে থাকেন তবে এটি বান্ডিলিং এবং মাইনাইফিকেশন উভয়ই অক্ষম করে।

ইন Global.asax.cs ফাইল, লাইন হিসেবে নিচে উল্লিখিত যোগ

protected void Application_Start()
{
    System.Web.Optimization.BundleTable.EnableOptimizations = false;
}

আমি কেবল বুঝতে পারি না যে আমি যখন এই বৈশিষ্ট্যটি বন্ধ করে রেখেছি তখন কেন আমার কম ফাইলগুলি সিএসএসে রূপান্তরিত হয়? আমি যখন অপ্টিমাইজেশন সক্ষম করি তখন কম ফাইল বান্ডিল করা আর কাজ করে না।
ফ্রেনকিবি

5

প্রতি বান্ডিল ভিত্তিতে মিনিফিকেশন কীভাবে অক্ষম করবেন তা এখানে:

bundles.Add(new StyleBundleRaw("~/Content/foobarcss").Include("/some/path/foobar.css"));
bundles.Add(new ScriptBundleRaw("~/Bundles/foobarjs").Include("/some/path/foobar.js"));

সিডিনোট: আপনার বান্ডিলগুলির জন্য ব্যবহৃত পাথগুলি আপনার প্রকাশিত বিল্ডগুলির কোনও প্রকৃত পাথের সাথে মিলিত হওয়া উচিত নয় অন্যথায় কিছুই কাজ করবে না। .Js, .css এবং / অথবা 'ব্যবহার এড়াতে ভুলবেন না। এবং বান্ডেলের নামে যে কোনও জায়গায় '_'। উপরের উদাহরণের মতো নামটি যতটা সম্ভব সহজ এবং সহজবোধ্য রাখুন।

সাহায্যকারী ক্লাসগুলি নীচে দেখানো হয়েছে। লক্ষ্য করুন যে এই ক্লাসগুলিকে ভবিষ্যত-প্রমাণ করার জন্য আমরা জেরিয়াস / সিএসএস মিনিফাইং ইনস্ট্যান্সগুলি .Carar () ব্যবহারের পরিবর্তে অপসারণ করি এবং আমরা একটি মাইম-টাইপ-সেটার রূপান্তরও সন্নিবেশ করি যা প্রযোজনা বিল্ডগুলি সমস্যায় পড়তে বাধ্য হয় বিশেষত যখন এটি সিএসএস-বান্ডিলগুলি সঠিকভাবে হস্তান্তর করতে আসে (ফায়ারফক্স এবং ক্রোম মাইম-টাইপ সহ সিএসএস বান্ডিলগুলি "টেক্সট / এইচটিএমএল" সেট করে যা ডিফল্ট হয়):

internal sealed class StyleBundleRaw : StyleBundle
{
        private static readonly BundleMimeType CssContentMimeType = new BundleMimeType("text/css");

        public StyleBundleRaw(string virtualPath) : this(virtualPath, cdnPath: null)
        {
        }

        public StyleBundleRaw(string virtualPath, string cdnPath) : base(virtualPath, cdnPath)
        {
                 Transforms.Add(CssContentMimeType); //0 vital
                 Transforms.Remove(Transforms.FirstOrDefault(x => x is CssMinify)); //0
        }
        //0 the guys at redmond in their infinite wisdom plugged the mimetype "text/css" right into cssminify    upon unwiring the minifier we
        //  need to somehow reenable the cssbundle to specify its mimetype otherwise it will advertise itself as html and wont load
}

internal sealed class ScriptBundleRaw : ScriptBundle
{
        private static readonly BundleMimeType JsContentMimeType = new BundleMimeType("text/javascript");

        public ScriptBundleRaw(string virtualPath) : this(virtualPath, cdnPath: null)
        {
        }

        public ScriptBundleRaw(string virtualPath, string cdnPath) : base(virtualPath, cdnPath)
        {
                 Transforms.Add(JsContentMimeType); //0 vital
                 Transforms.Remove(Transforms.FirstOrDefault(x => x is JsMinify)); //0
        }
        //0 the guys at redmond in their infinite wisdom plugged the mimetype "text/javascript" right into jsminify   upon unwiring the minifier we need
        //  to somehow reenable the jsbundle to specify its mimetype otherwise it will advertise itself as html causing it to be become unloadable by the browsers in published production builds
}

internal sealed class BundleMimeType : IBundleTransform
{
        private readonly string _mimeType;

        public BundleMimeType(string mimeType) { _mimeType = mimeType; }

        public void Process(BundleContext context, BundleResponse response)
        {
                 if (context == null)
                          throw new ArgumentNullException(nameof(context));
                 if (response == null)
                          throw new ArgumentNullException(nameof(response));

         response.ContentType = _mimeType;
        }
}

এই পুরো জিনিসটি কাজ করতে আপনাকে ইনস্টল করতে হবে (নুগেটের মাধ্যমে):

ওয়েবগ্রিজ 1.6.0+ মাইক্রোসফ্ট.অস্পনেট.ওয়েব.অ্যাপটিমাইজেশন 1.1.3+

এবং আপনার ওয়েবকনফিগটিও এর মতো সমৃদ্ধ করা উচিত:

<runtime>
       [...]
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-x.y.z.t" newVersion="x.y.z.t" />
       </dependentAssembly>
       <dependentAssembly>
              <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-x.y.z.t" newVersion="x.y.z.t" />
       </dependentAssembly>
        [...]
</runtime>

<!-- setting mimetypes like we do right below is absolutely vital for published builds because for some reason the -->
<!-- iis servers in production environments somehow dont know how to handle otf eot and other font related files   -->
</system.webServer>
        [...]
        <staticContent>
      <!-- in case iis already has these mime types -->
      <remove fileExtension=".otf" />
      <remove fileExtension=".eot" />
      <remove fileExtension=".ttf" />
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />

      <mimeMap fileExtension=".otf" mimeType="font/otf" />
      <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
      <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
      </staticContent>

      <!-- also vital otherwise published builds wont work  https://stackoverflow.com/a/13597128/863651  -->
      <modules runAllManagedModulesForAllRequests="true">
         <remove name="BundleModule" />
         <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
      </modules>
      [...]
</system.webServer>

নোট করুন যে আপনার সিএসএস-বান্ডিলগুলি ফন্ট ইত্যাদির ক্ষেত্রে কাজ করতে আপনাকে অতিরিক্ত পদক্ষেপ নিতে হতে পারে তবে এটি অন্যরকম একটি গল্প।


4

ইতিমধ্যে প্রদত্ত জবাবগুলির পরিপূরক হিসাবে, আপনি যদি অন্য ফাইলগুলির জন্য সম্পূর্ণ বান্ডিলিং এবং মিনিফাইজেশন করার সময় কিছু ফাইলকে মাইনফাই / অবফসকেট / কনটেনেট করতে না চান তবে সর্বোত্তম বিকল্পটি একটি কাস্টম রেন্ডারারের সাথে যেতে হবে যা একটি নির্দিষ্ট বান্ডেলের সামগ্রীগুলি পড়বে (গুলি) এবং বান্ডেলের ভার্চুয়াল পাথ রেন্ডার করার পরিবর্তে পৃষ্ঠায় ফাইলগুলি রেন্ডার করুন। আমার ব্যক্তিগতভাবে এটির প্রয়োজন হয়েছিল কারণ আমার 9 টি সিডির ফাইলগুলি যখন ম্যানিফিকেশন বন্ধ করা হচ্ছে তখনও বিছানায় আইই 9 ছিল ing *% @

এই নিবন্ধটি আপনাকে অনেক ধন্যবাদ , যা আমাকে কোডের জন্য প্রারম্ভিক বিন্দু দিয়েছিল যা আমি সিএসএস রেন্ডারার তৈরি করেছিলাম যা সিএসএসের জন্য ফাইলগুলি রেন্ডার করতে পারে তবে তবুও সিস্টেমটিকে আমার জাভাস্ক্রিপ্ট ফাইলগুলি বান্ডিল / মিনিফাইড / অবরুদ্ধকরণ করতে দেয়।

স্থিতিশীল সহায়ক শ্রেণি তৈরি করেছে:

using System;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;

namespace Helpers
{
  public static class OptionalCssBundler
  {
    const string CssTemplate = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />";

    public static MvcHtmlString ResolveBundleUrl(string bundleUrl, bool bundle)
    {
      return bundle ? BundledFiles(BundleTable.Bundles.ResolveBundleUrl(bundleUrl)) : UnbundledFiles(bundleUrl);
    }

    private static MvcHtmlString BundledFiles(string bundleVirtualPath)
    {
      return new MvcHtmlString(string.Format(CssTemplate, bundleVirtualPath));
    }

    private static MvcHtmlString UnbundledFiles(string bundleUrl)
    {
      var bundle = BundleTable.Bundles.GetBundleFor(bundleUrl);

      StringBuilder sb = new StringBuilder();
      var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);

      foreach (BundleFile file in bundle.EnumerateFiles(new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, bundleUrl)))
      {
        sb.AppendFormat(CssTemplate + Environment.NewLine, urlHelper.Content(file.VirtualFile.VirtualPath));
      }

      return new MvcHtmlString(sb.ToString());
    }

    public static MvcHtmlString Render(string bundleUrl, bool bundle)
    {
      return ResolveBundleUrl(bundleUrl, bundle);
    }
  }

}

তারপরে রেজার লেআউট ফাইলটিতে:

@OptionalCssBundler.Render("~/Content/css", false)

মান পরিবর্তে:

@Styles.Render("~/Content/css")

আমি নিশ্চিত যে জাভাস্ক্রিপ্ট ফাইলগুলির জন্য একটি alচ্ছিক রেন্ডারার তৈরি করার জন্য এই সহায়কটিতেও আপডেট করার জন্য সামান্য প্রয়োজন হবে।


1
ভাল কাজ করে. ফাইলগুলি আপডেট হওয়ার সাথে সাথে আপনি যদি url পরিবর্তন করতে চান তবে আপনি এমন CssTemplateকিছুতে পরিবর্তন করতে পারেন "<link href=\"{0}?f={1}\" rel=\"stylesheet\" type=\"text/css\" />"এবং sb.AppendFormatলাইনটিকে এমন sb.AppendFormat(CssTemplate + Environment.NewLine, urlHelper.Content(file.VirtualFile.VirtualPath), System.IO.File.GetLastWriteTimeUtc(HttpContext.Current.Server.MapPath(file.IncludedVirtualPath)).Ticks);
কোনও

সত্য, আমরা কাজের মতো অনেক কিছু করেছি। আমাদের কাছে জেএস ভার্সন নামে একটি পাবলিক স্ট্যাটিক স্ট্রিং ছিল যা আমরা গ্লোবাল.এক্সএক্স ক্লাসে রেখেছিলাম যা নির্বাহী পরিষদের মেজ / মিনিট / বিল্ড / রেভ টানেছে। তারপরে আমরা এটিকে এরকম উল্লেখ করেছি: <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট" src = "স্ক্রিপ্ট / jsfile_name.js <% = গ্লোবাল। জেএস সংস্করণ%>"> </script>
জেমস এবি

3

EnableOptimizationsআপনার প্রকল্পে কীওয়ার্ড অনুসন্ধান করুন

সুতরাং যদি আপনি খুঁজে

BundleTable.EnableOptimizations = true;

এটি চালু করুন false


2
এটি মিনিফিকেশন অক্ষম করে, তবে এটি পুরোপুরি বান্ডিলিংকে অক্ষম করে, যা আমার মনে হয় কমপক্ষে লক্ষ্য করা উচিত।
জন পাভেক

1

আপনি যদি কম / SASS সিএসএস রূপান্তর ব্যবহার করেন তবে এমন একটি বিকল্প রয়েছে useNativeMinificationযা মিনিফিকেশন অক্ষম করার জন্য (ওয়েবকনফাইগ) মিথ্যাতে সেট করা যেতে পারে। আমার প্রয়োজনের জন্য যখন আমার প্রয়োজন হবে আমি কেবল এটি এখানে পরিবর্তন করেছি, তবে আপনি ওয়েব কন্টিগগ ট্রান্সফর্মেশনগুলি সর্বদা এটি মুক্তির ক্ষেত্রে সক্ষম করতে বা কোডে এটি পরিবর্তন করার উপায় খুঁজে পেতে পারেন।

<less useNativeMinification="false" ieCompat="true" strictMath="false"
      strictUnits="false" dumpLineNumbers="None">

টিপ: এর পুরো বিষয়টি হ'ল আপনার সিএসএস, যা আপনি ব্রাউজারে সরঞ্জামগুলি পরিদর্শন করতে পারেন বা কেবল ফাইলটি খোলার মাধ্যমে। যখন বন্ডলিং সক্ষম করা থাকে তখন ফাইলের নামগুলি প্রতিটি সংকলনে পরিবর্তিত হয় তাই আমি নিম্নলিখিতটি আমার পৃষ্ঠার শীর্ষে রাখি যাতে প্রতিবার পরিবর্তিত হয়ে আমি আমার সংকলিত সিএসএসকে একটি নতুন ব্রাউজার উইন্ডোতে দেখতে পারি।

@if (Debugger.IsAttached) 
{
    <a href="@Styles.Url(ViewBag.CSS)" target="css">View CSS</a>
}

এটি এমন একটি গতিশীল URL হবে https://example.com/Content/css/bundlename?v=UGd0FjvFJz3ETxlNN9NVqNOeYMRrOkQAkYtB04KisCQ1


আপডেট: মোতায়েন / রিলিজ বিল্ড চলাকালীন আমার কাছে এটি সত্য করে দেওয়ার জন্য আমি একটি ওয়েবকনফিগ রূপান্তর তৈরি করেছি

  <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
    <less xdt:Transform="Replace" useNativeMinification="true" ieCompat="true" strictMath="false" strictUnits="false" dumpLineNumbers="None">
      <jsEngine name="MsieJsEngine" />
    </less>
  </bundleTransformer>

1
ফাইলের নামটি প্রতিটি সংকলনে পরিবর্তন হয় না। এটি ফাইলের বিষয়বস্তুর উপর ভিত্তি করে, তাই যখনই ফাইল পরিবর্তন হয় এটি পরিবর্তন হয়।
জিম রাদেন

1

এই নতুন কাঠামো, যেমন ভবিষ্যতে কাউকে দরকারী হতে পারে যখন বনাম মাধ্যমে সেটআপ, একটি ডিফল্ট পায় web.config, web.Debug.configএবং web.Release.config। ইন web.release.configআপনি এই লাইন পাবেন:

<compilation xdt:Transform="RemoveAttributes(debug)" />

এটি আমার করা যে কোনও ইনলাইন পরিবর্তনগুলিকে ওভাররাইড করে মনে হচ্ছে। আমি এই লাইনটি মন্তব্য করেছি এবং আমরা গ্রেভী ছিলাম (একটি "রিলিজ" বিল্ডে নন-মাইনিফাইড কোড দেখার শর্তে)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.