Wypróbowuję funkcję MVC4 System.Web.Optimization 1.0 ScriptBundle .
Mam następującą konfigurację:
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);
}
}
i następujący widok:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
gdzie BundlePaths.CanvasScripts
jest "~/bundles/scripts/canvas"
. Przedstawia to:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Jak na razie dobrze, z wyjątkiem ~/Scripts/Shared/achievements.js
pierwszego skryptu w dołączonym źródle. Zależy to od każdego skryptu zawartego przed nim w ScriptBundle
. Jak mogę się upewnić, że przestrzega kolejności, w której dodam instrukcje include do pakietu?
Aktualizacja
Była to stosunkowo nowa aplikacja ASP.NET MVC 4, ale odwoływała się do pakietu wstępnego wersji platformy optymalizacji. Usunąłem go i dodałem pakiet RTM z http://nuget.org/packages/Microsoft.AspNet.Web.Optimization . W wersji RTM z debug = true w pliku web.config,@Scripts.Render("~/bundles/scripts/canvas")
renderuje poszczególne tagi skryptu we właściwej kolejności.
Z debug = false w web.config, połączony skrypt ma najpierw skrypt osiągnięć.js, ale ponieważ jest to definicja funkcji (konstruktor obiektu), która jest wywoływana później, działa bez błędów. Być może minifier jest wystarczająco inteligentny, aby znaleźć zależności?
Próbowałem też IBundleOrderer
implementację, którą Darin Dimitrov zasugerował w RTM z obiema opcjami debugowania i zachowywała się tak samo.
Tak więc zminimalizowana wersja nie jest w kolejności, której się spodziewam, ale działa.