Я пробую функцию MVC4 System.Web.Optimization 1.0 ScriptBundle .
У меня следующая конфигурация:
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);
}
}
и следующий вид:
где BundlePaths.CanvasScripts
есть "~/bundles/scripts/canvas"
. Это делает это:
Пока все хорошо, за исключением того, что ~/Scripts/Shared/achievements.js
— это первый скрипт в исходном коде. Это зависит от каждого скрипта, включенного перед ним в ScriptBundle
. Как я могу убедиться, что он соблюдает порядок, в котором я добавляю операторы включения в пакет?
Обновление
Это было относительно новое приложение ASP.NET MVC 4, но оно ссылалось на предварительный пакет платформы оптимизации. Я удалил его и добавил пакет RTM изhttp://nuget.org/packages/Microsoft.AspNet.Web.Optimization. В версии RTM с параметром debug=true в файле web.config @Scripts.Render("~/bundles/scripts/canvas")
отображает отдельные теги сценария в правильном порядке.
С debug=false в web.config комбинированный скрипт сначала имеет скрипт achievement.js, но поскольку это конструктор объекта определения функции (), который вызывается позже, он выполняется без ошибок.Возможно, минификатор достаточно умен, чтобы разобраться в зависимостях?
Я также попробовал реализацию IBundleOrderer
, предложенную Дарином Димитровым с RTM, с обеими опциями отладки, и она вела себя одинаково.
Так что уменьшенная версия не в том порядке, в котором я ожидаю, но она работает.