Sto provando la funzione MVC4 System.Web.Optimization 1.0 ScriptBundle .
Ho la seguente configurazione:
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);
}
}
e la seguente vista:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
dove BundlePaths.CanvasScripts
è "~/bundles/scripts/canvas"
. Rende questo:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Fin qui tutto bene, tranne che ~/Scripts/Shared/achievements.js
è il primo script nel sorgente in bundle. Dipende da ogni script incluso prima di esso nel file ScriptBundle
. Come posso assicurarmi che rispetti l'ordine in cui aggiungo le istruzioni include al bundle?
Aggiornare
Si trattava di un'applicazione ASP.NET MVC 4 relativamente nuova, ma faceva riferimento al pacchetto pre-rilascio del framework di ottimizzazione. L'ho rimosso e ho aggiunto il pacchetto RTM da http://nuget.org/packages/Microsoft.AspNet.Web.Optimization . Con la versione RTM con debug = true in web.config, @Scripts.Render("~/bundles/scripts/canvas")
esegue il rendering dei singoli tag di script nell'ordine corretto.
Con debug = false in web.config, lo script combinato ha prima lo script realments.js, ma poiché è una definizione di funzione (costruttore di oggetti) che viene chiamata in seguito, viene eseguito senza errori. Forse il minifier è abbastanza intelligente da capire le dipendenze?
Ho anche provato l' IBundleOrderer
implementazione suggerita da Darin Dimitrov con RTM con entrambe le opzioni di debug e si è comportata allo stesso modo.
Quindi la versione minimizzata non è nell'ordine che mi aspetto, ma funziona.