Я пробую функцию 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);
}
}
и следующий вид:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
где BundlePaths.CanvasScripts
есть "~/bundles/scripts/canvas"
. Он отображает это:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Пока все хорошо, за исключением ~/Scripts/Shared/achievements.js
первого скрипта в исходном коде. Это зависит от каждого скрипта, включенного до него в ScriptBundle
. Как я могу убедиться, что он соблюдает порядок, в котором я добавляю операторы include в пакет?
Обновить
Это было относительно новое приложение 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, с обоими параметрами отладки, и она вела себя одинаково.
Таким образом, уменьшенная версия находится не в том порядке, в котором я ожидал, но она работает.