Ich habe ein seltsames Problem mit dem mvc4-Bundler, der keine Dateien mit der Erweiterung .min.js enthält
In meiner BundleConfig-Klasse deklariere ich
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/jquery")
.Include("~/Scripts/jquery-1.8.0.js")
.Include("~/Scripts/jquery.tmpl.min.js"));
}
Meiner Ansicht nach erkläre ich
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
Und wenn es rendert, rendert es nur
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Wenn ich jquery.tmpl.min.js in jquery.tmpl.js umbenenne (und den Pfad im Bundle entsprechend aktualisiere), werden beide Skripte korrekt gerendert.
Gibt es eine Konfigurationseinstellung, die dazu führt, dass '.min.js'-Dateien ignoriert werden?
v
Parameter-Hash das wird der URL hinzugefügt und ändert sich, wenn sich der Dateiinhalt ändert)Antworten:
Die Lösung, die ich ursprünglich gepostet habe, ist fraglich (ist ein schmutziger Hack). Das optimierte Verhalten hat sich im Microsoft.AspNet.Web.Optimization-Paket geändert, und die Optimierung funktioniert nicht mehr, wie viele Kommentatoren betonten. Im Moment kann ich das Problem mit der Version 1.1.3 des Pakets überhaupt nicht reproduzieren.
Weitere Informationen zu Ihren Aktivitäten finden Sie in den Quellen zu System.Web.Optimization.BundleCollection (Sie können beispielsweise dotPeek verwenden ). Lesen Sie auch die Antwort von Max Shmelev .
Ursprüngliche Antwort :
Benennen Sie .min.js entweder in .js um oder tun Sie etwas Ähnliches
quelle
Microsoft impliziert das folgende Verhalten (und ich ziehe es vor, es in meinen Projekten zu befolgen):
Kurzversion
Infolgedessen werden die Datei script.js automatisch im DEBUG- Modus und die Datei script.min.js im RELEASE- Modus angezeigt .
lange Version
Sie können auch die Version .debug.js haben . In diesem Fall ist die Datei in DEBUG in der folgenden Priorität enthalten:
in RELEASE:
Hinweis
Übrigens ist der einzige Grund, eine .min- Version Ihrer Skripte in MVC4 zu haben, der Fall, wenn die minimierte Version nicht automatisch verarbeitet werden kann. Beispielsweise kann der folgende Code nicht automatisch verschleiert werden:
In allen anderen Fällen können Sie nur eine Debug-Version Ihres Skripts verwenden.
quelle
jquery.tmpl
) die Nicht-Min-Version der Datei nicht haben, nicht mitgeliefert wurden und nicht heruntergeladen wurden. Der Bundler ignoriert die Skriptdateien vollständig, wenn er keine Nicht-Min-Version im Debug-Modus hatWenn Sie nur eine verkleinerte Version einer Datei haben, besteht die einfachste Lösung darin, die minimierte Datei zu kopieren, .min aus dem Namen der kopierten Datei zu entfernen und dann auf den nicht minimierten Dateinamen in Ihrem Bundle zu verweisen.
Angenommen, Sie haben eine js-Komponente gekauft und eine Datei mit dem Namen some-lib-3.2.1.min.js erhalten. Gehen Sie wie folgt vor, um diese Datei in einem Bundle zu verwenden:
Kopieren Sie some-lib-3.2.1.min.js und benennen Sie die kopierte Datei in some-lib-3.2.1.js um. Fügen Sie beide Dateien in Ihr Projekt ein.
Verweisen Sie wie folgt auf die nicht minimierte Datei in Ihrem Bundle:
Nur weil die Datei ohne 'min' im Namen tatsächlich minimiert ist, sollte dies keine Probleme verursachen (außer der Tatsache, dass sie im Wesentlichen nicht lesbar ist). Es wird nur im Debug-Modus verwendet und als separates Skript geschrieben. Wenn Sie sich nicht im Debug-Modus befinden, sollte die vorkompilierte min-Datei in Ihrem Bundle enthalten sein.
quelle
Ich habe eine gute Lösung gefunden, die zumindest in MVC5 funktioniert. Sie können sie einfach
Bundle
anstelle von verwendenScriptBundle
. Es hat nicht das kluge VerhaltenScriptBundle
, das wir in diesem Fall nicht mögen (.min ignorieren usw.). In meiner Lösung verwende ichBundle
für 3D-Party-Skripte mit .min- und .map-Dateien und verwende sieScriptBundle
für unseren Code. Ich habe keine Nachteile dabei bemerkt. Damit es auf diese Weise funktioniert, müssen Sie die Originaldatei hinzufügen, z. B. angular.js, und es wird angular.js im Debug geladen und die angle.min.js im Release-Modus gebündelt.quelle
ScriptTable.EnableOptimizations = false
). Skriptpfade, die ein Muster enthalten, werden nicht gerendert (z~/Scripts/thirdpartylib/*.js
. B. ). Es funktioniert wannEnableOptimizations = true
, aber auchScriptBundle
.System.Web.Optimizations
oder aus dem Nuget-PaketMicrosoft.Web.Optimizations
?.min.js
Datei vorhanden, und das*.js
Muster stimmt nicht mit Dateien überein, die auf enden.min.js
.Um
*.min.js
Dateien zu rendern , müssen Sie deaktivieren. DiesBundleTable.EnableOptimizations
ist eine globale Einstellung, die für alle Bundles gilt.Wenn Sie Optimierungen nur für bestimmte Bundles aktivieren möchten, können Sie einen eigenen
ScriptBundle
Typ erstellen , der vorübergehend Optimierungen beim Auflisten von Dateien im Bundle aktiviert .Verwendung
OptimizedScriptBundle
anstelle vonScriptBundle
für Bundles, deren minimierte Datei immer verwendet werden sollte, unabhängig davon, ob eine nicht minimierte Datei vorhanden ist.Beispiel für die Kendo-Benutzeroberfläche für ASP.NET MVC, die als Sammlung nur minimierter Dateien verteilt wird.
quelle
Für meinen Fall habe ich die (wundervolle!) Knockout.js-Bibliothek verwendet, die als Debug / Non-Version erhältlich ist:
Damit dies funktioniert, habe ich "Knockout- {Version} .js" (ohne Debug) in mein Bundle aufgenommen und den .debug erhalten. js-Datei im Debug-Modus.
quelle
Eine einfache Möglichkeit, einfach die .min-Datei umzubenennen, zum Beispiel abc.min.css, als diese Datei einfach in abc_min.css umzubenennen und diese Ihrem Bundle hinzuzufügen. Ich weiß, dass dies nicht der richtige Weg ist, sondern nur eine vorübergehende Lösung. Danke und viel Spaß beim Codieren.
quelle
Bundler haben viele Vorteile überprüfen Sie diese Seite ABER :
Die Microsoft MVC4-Plattform berücksichtigt, dass Sie für jedes Skript oder Style-Bundle mindestens eine minimierte und eine nicht minimierte Version haben (andere Dateien wie Debug und vsdoc sind ebenfalls verfügbar). Wir haben also Probleme in Situationen, in denen es nur eine dieser Dateien gibt.
Sie können den Debug-Status in der Datei web.config dauerhaft ändern, um die Ausgabe zu verarbeiten:
Siehe die Ausgabeänderungen! Dateifilterung geändert. Um diesen Zweck zu erfüllen, müssen wir die Filterung für ignorierte Fälle ändern, wodurch sich die Anwendungslogik ändert!
quelle
Leute, ich würde es einfach so lange behalten, bis Microsoft es zusammenbringt
Versuche dies
In RegisterBundles erstellen Sie dieses Bundle für Kendo
Geben Sie in _Layout.cshtml Folgendes ein:
Auf diese Weise erhalten wir die besten Bundles in der Produktion und eine Referenz in Debug
Beheben Sie das Problem, wenn Microsoft den MVC 4-Code korrigiert
quelle