Ich probiere die MVC4 System.Web.Optimization 1.0 ScriptBundle-Funktion aus .
Ich habe die 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
ist "~/bundles/scripts/canvas"
. 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. Es hängt von jedem Skript ab, das zuvor in der ScriptBundle
. Wie kann ich sicherstellen, dass die Reihenfolge eingehalten wird, in der ich dem Bundle Include-Anweisungen hinzufüge?
Aktualisieren
Dies war eine relativ neue ASP.NET MVC 4-Anwendung, die jedoch auf das Pre-Release-Paket des Optimierungsframeworks verwies. Ich habe es entfernt und das RTM-Paket von http://nuget.org/packages/Microsoft.AspNet.Web.Optimization hinzugefügt . Bei der RTM-Version mit debug = true in web.config werden @Scripts.Render("~/bundles/scripts/canvas")
die einzelnen Skript-Tags in der richtigen Reihenfolge gerendert .
Mit debug = false in web.config verfügt das kombinierte Skript zuerst über das Skript settings.js. Da es sich jedoch um eine später aufgerufene Funktionsdefinition (Objektkonstruktor) handelt, wird es fehlerfrei ausgeführt. Vielleicht ist der Minifier klug genug, um Abhängigkeiten herauszufinden?
Ich habe auch die IBundleOrderer
Implementierung ausprobiert, die Darin Dimitrov mit RTM mit beiden Debug-Optionen vorgeschlagen hat, und sie hat sich gleich verhalten.
Die verkleinerte Version ist also nicht in der von mir erwarteten Reihenfolge, aber sie funktioniert.
Sie können einen benutzerdefinierten Bundle-Besteller (
IBundleOrderer
) schreiben , der sicherstellt, dass Bundles in der Reihenfolge enthalten sind, in der Sie sie registrieren:und dann:
und aus Ihrer Sicht:
quelle
Danke Darin. Ich habe eine Erweiterungsmethode hinzugefügt.
Verwendung
quelle
FileInfo
fürBundleFile
in der Methodensignatur - Schnittstelle. Sie haben es geändert.BundleFile
Klasse? Um eingebettete Ressourcen zu bündeln, versuche ich, dies zu instanziieren, und es erfordert einen (konkreten untergeordneten)VirtualFile
Parameter in seinem Konstruktor.Die Antwort von SoftLion wurde aktualisiert, um Änderungen in MVC 5 (BundleFile vs FileInfo) zu verarbeiten.
Verwendung:
Ich verwende gerne fließende Syntax, aber es funktioniert auch mit einem einzigen Methodenaufruf und allen als Parameter übergebenen Skripten.
quelle
Sie sollten in der Lage sein, die Reihenfolge mithilfe der BundleCollection.FileSetOrderList festzulegen. Schauen Sie sich diesen Blog-Beitrag an: http://weblogs.asp.net/imranbaloch/archive/2012/09/30/hidden-options-of-asp-net-bundling-and-minification.aspx . Der Code in Ihrer Instanz wäre ungefähr so:
quelle
Sie sollten die Verwendung der Kassette http://getcassette.net/ in Betracht ziehen. Sie unterstützt die automatische Erkennung von Skriptabhängigkeiten basierend auf Skriptreferenzen, die in jeder Datei enthalten sind.
Wenn Sie sich lieber an die MS Web Optimization-Lösung halten, aber die Idee mögen, Skripte basierend auf Skriptreferenzen anzuordnen, sollten Sie meinen Blog-Beitrag unter http://blogs.microsoft.co.il/oric/2013/12/27/building-single lesen -page-application-bundle-orderer /
quelle
Die Antwort von @Darin Dimitrov funktioniert perfekt für mich, aber mein Projekt ist in VB geschrieben. Hier ist seine Antwort, die in VB konvertiert wurde
Um es zu benutzen:
quelle
Class 'AsIsBundleOrderer' must implement 'Function OrderFiles(context as ....)' for interface 'System.Web.Optimization.IBundleOrderer'
Irgendwelche Ideen?