Ich probiere die MVC4 System.Web.Optimization 1.0 ScriptBundle feature aus.Wie kann ich eine explizite ScriptBundle-Include-Reihenfolge angeben?
Ich habe folgende Konfiguration:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
// shared scripts
Bundle canvasScripts =
new ScriptBundle(BundlePaths.CanvasScripts)
.Include("~/Scripts/modernizr-*")
.Include("~/Scripts/json2.js")
.Include("~/Scripts/columnizer.js")
.Include("~/Scripts/jquery.ui.message.min.js")
.Include("~/Scripts/Shared/achievements.js")
.Include("~/Scripts/Shared/canvas.js");
bundles.Add(canvasScripts);
}
}
und die folgende Ansicht:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
wo BundlePaths.CanvasScripts
"~/bundles/scripts/canvas"
ist. Es macht dies:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
So weit so gut, außer ~/Scripts/Shared/achievements.js
das erste Skript in der gebündelten Quelle ist. Es hängt von jedem Skript ab, das davor in der ScriptBundle
enthalten ist. Wie kann ich sicherstellen, dass die Reihenfolge beachtet wird, in der ich include-Anweisungen zum Bundle hinzufüge?
aktualisieren
Das war eine relativ neue 4 ASP.NET MVC-Anwendung, aber es war Referenzierung der Optimierung Rahmen Pre-Release-Paket. Ich entfernte es und fügte das RTM-Paket von http://nuget.org/packages/Microsoft.AspNet.Web.Optimization hinzu. Bei der RTM-Version mit debug = true in web.config rendert @Scripts.Render("~/bundles/scripts/canvas")
die einzelnen Skript-Tags in der richtigen Reihenfolge.
Mit debug = false in web.config hat das kombinierte Skript zuerst das Skript achievements.js, aber da es eine Funktionsdefinition (Objektkonstruktor) ist, die später aufgerufen wird, wird es ohne Fehler ausgeführt. Vielleicht ist der Minifier schlau genug, Abhängigkeiten herauszufinden?
Ich versuchte auch die IBundleOrderer
Implementierung, die Darin Dimitrov mit RTM mit beiden Debug-Optionen vorgeschlagen und es das gleiche Verhalten.
Also die verkleinerte Version ist nicht in der Reihenfolge, die ich erwarte, aber es funktioniert.
Ich habe auf die Version 1.0 aktualisiert. Siehe meine aktualisierte Frage. Die Inhalte von achievements.js sind zuerst in der verkleinerten Version enthalten, funktionieren aber seit ihrer später aufgerufenen Funktion. – jrummell