Я випробовую функцію 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
. Як я можу переконатись, що він дотримується порядку, в якому я додаю, включення виразів до набору?
Оновлення
Це була відносно нова програма 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, комбінований сценарій спочатку має сценарій dosegs.js, але оскільки його визначення функції (конструктор об'єктів), яке викликається пізніше, він працює без помилок. Можливо, мініфікатор досить розумний, щоб з’ясувати залежності?
Я також спробував IBundleOrderer
реалізацію, яку Дарин Димитров запропонував для RTM з обома варіантами налагодження, і він поводився однаково.
Тож зменшена версія не в тому порядку, який я очікую, але вона працює.