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' IBundleOrdererimplementazione 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.