Я пытаюсь использовать 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
является первым script в связанном источнике. Это зависит от каждого script, включенного до него в 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")
отображает отдельные теги script в правильном порядке.
С debug = false в web.config объединенный script сначала имеет достижения .js script, но поскольку его определение функции (конструктор объекта), которое вызывается позже, оно выполняется без ошибок. Возможно, minifier достаточно умен, чтобы выяснить зависимости.
Я также попробовал реализацию IBundleOrderer
, которую Дарин Димитров предложил с RTM с обеими параметрами отладки, и он вел себя одинаково.
Таким образом, сокращенная версия не в том порядке, который я ожидаю, но она работает.