12

Desidero qualche consiglio esperto su Bundle e Minification ASP.NET MVC. Ho nei miei file di script del progetto che hanno entrambe le versioni non terminate (.js) e minified (.min.js). Li ho incluso nel mio pacchetto script come segue:Bundle e minifoto ASP.NET - Compresi file già miniati per bundle di produzione e file non terminati per lo sviluppo

bundles.Add(new ScriptBundle("~/bundles/layout").Include(
        "~/Scripts/jquery-{version}.js", 
        "~/Scripts/lib/errorhandling.js", 
        "~/Scripts/lib/errorhandling.min.js", 
        "~/Scripts/vendor/modernizr.custom.js", 
        "~/Scripts/vendor/modernizr.custom.min.js", 
        "~/Scripts/toastr.js", 
        "~/Scripts/toastr.min.js")); 

Sembra che il bundle contiene infatti solo una volta ogni file di script, non due volte. L'ho confermato sia per lo sviluppo che per la produzione. (Come nota a margine, in fase di sviluppo, cioè, quando debug = true, i bundle non sono renderizzati ma i file sono inclusi come tag script separati.Questo è il comportamento desiderato anche per me.)

Le mie domande sono:

(1) È questo il modo migliore e consigliato per includere file già minificati per l'installazione di produzione e per i file non modificati per lo sviluppo?

(2) ASP.NET tenta di ridurre l'intero pacchetto in produzione (anche se è già stato ridotto)? In caso affermativo, qual è il modo migliore per impedire a ASP.NET di tentare di minimizzare il pacchetto?

Grazie in anticipo!

risposta

17

Non è necessario includere specificamente le versioni minificate nel pacchetto di script. Per impostazione predefinita, MVC cercherà un file corrispondente con .min.js e includerà quello (non è del tutto sicuro se trys per ulteriori informazioni). In caso contrario, crea una versione minificata. È possibile verificare questo aggiungendo quanto segue a BundleConfig.cs

using System.Web.Optimization; 

quindi aggiungendo quanto segue al fine di ignorare debug=true nello sviluppo

BundleTable.EnableOptimizations = true; 

Da MS documentation

Il quadro accorpamento segue diversi comuni convenzioni quali:

  • Seleziona il file ".min" per il rilascio quando "FileX.min.js" e "FileX.js" esistono.
  • Selezione della versione non ".min" per il debug.
  • Ignorare i file "-vsdoc" (come jquery-1.7.1-vsdoc.js), che vengono utilizzati solo da IntelliSense.
+0

Interessante, ho imparato qualcosa io stesso, non ho capito che il framework avrebbe selezionato il versione .min automaticamente. Suppongo che dovrei passare un po 'di tempo nei documenti da solo. Ho sempre preso il bundling al valore nominale. – codenheim

+0

I file con estensione hanno spesso commenti di mappe di origine come questo: /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license // @ sourceMappingURL = jquery-1.10.2.min.map */ Se utilizzo Bundle, rimarranno nel gruppo. È un problema? Se utilizzo ScriptBundle, ASP.NET li rimuoverà. Devo mantenere questi commenti nel pacchetto o dovrebbero essere rimossi? –

+0

In tal caso, usare Bundle() invece di ScriptBundle() sulle versioni già miniate è il modo per aggirarlo. Almeno questo è un modo. – codenheim

5

Minification, o no, la funzionalità di raggruppamento è utile per raggruppamenti logici di script e css che vanno insieme e come un unico luogo per controllare le cose. Genera anche URL univoci, quindi elimina i problemi della cache del browser.

Se si utilizza ScriptBundle, il motore proverà a ridurre (tranne quando si imposta debug = true come si è mostrato).

È possibile disattivare il minifoto, ma conservare il raggruppamento, utilizzando semplicemente Bundle() invece di ScriptBundle(). Si veda la risposta di Martin qui:

ASP.NET Bundles how to disable minification

Per inciso, utilizzando i file pre-minified con Bundle() in contrapposizione a ScriptBundle(), manterrà le intestazioni di licenza. Con la licenza MIT di jQuery, stabilisce almeno che non dovrebbe essere rimosso. Non sono sicuro di come interpretare il fatto che il modello Microsoft MVC predefinito utilizza ScriptBundle().

+0

L'ultimo punto, vuol dire che MVC minimizza lo script anche se si trova una versione min.js? Sto avendo strani output con angular.js e angular.min.js sta restituendo errori di minification anche se voglio solo che utilizzi la versione pre-minified fornita – obaylis

Problemi correlati