Estou testando o recurso MVC4 System.Web.Optimization 1.0 ScriptBundle .
Tenho a seguinte configuração:
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 a seguinte visão:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
onde BundlePaths.CanvasScripts
está "~/bundles/scripts/canvas"
. Ele processa isso:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Até aqui tudo bem, exceto que ~/Scripts/Shared/achievements.js
é o primeiro script na fonte agrupada. Depende de cada script incluído antes dele no ScriptBundle
. Como posso garantir que ele respeite a ordem em que adiciono instruções de inclusão ao pacote?
Atualizar
Este era um aplicativo ASP.NET MVC 4 relativamente novo, mas fazia referência ao pacote de pré-lançamento da estrutura de otimização. Eu o removi e adicionei o pacote RTM de http://nuget.org/packages/Microsoft.AspNet.Web.Optimization . Com a versão RTM com debug = true em web.config, @Scripts.Render("~/bundles/scripts/canvas")
renderiza as tags de script individuais na ordem correta.
Com debug = false em web.config, o script combinado tem o script Achievements.js primeiro, mas como é uma definição de função (construtor de objeto) que é chamada posteriormente, ele é executado sem erros. Talvez o minificador seja inteligente o suficiente para descobrir dependências?
Também tentei a IBundleOrderer
implementação que Darin Dimitrov sugeriu com RTM com ambas as opções de depuração e se comportou da mesma forma.
Portanto, a versão reduzida não está na ordem que espero, mas funciona.