Ben dışarı çalışıyorum MVC4 System.Web.Optimization 1.0 ScriptBundle özelliğini .
Aşağıdaki yapılandırmaya sahibim:
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);
}
}
ve aşağıdaki görünüm:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
nerede BundlePaths.CanvasScripts
olduğunu "~/bundles/scripts/canvas"
. Bunu yapar:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Şimdiye kadar çok iyi, ancak ~/Scripts/Shared/achievements.js
paketlenmiş kaynaktaki ilk komut dosyası. Önünde bulunan her betiğe bağlıdır ScriptBundle
. Pakete dahil etme ifadelerini eklediğim sırayı karşıladığından nasıl emin olabilirim?
Güncelleme
Bu nispeten yeni bir ASP.NET MVC 4 uygulamasıydı, ancak optimizasyon çerçevesi ön yayın paketine başvuruyordu. Onu kaldırdım ve http://nuget.org/packages/Microsoft.AspNet.Web.Optimization'dan RTM paketini ekledim . Web.config dosyasında debug = true olan RTM sürümü ile @Scripts.Render("~/bundles/scripts/canvas")
ayrı komut dosyası etiketlerini doğru sırada işler.
Web.config dosyasında debug = false ile, birleşik komut dosyası önce achievements.js komut dosyasını içerir, ancak daha sonra çağrılan bir işlev tanımı (nesne yapıcısı) olduğu için hatasız çalışır. Minifier, bağımlılıkları çözecek kadar akıllı olabilir mi?
IBundleOrderer
Darin Dimitrov'un RTM ile önerdiği uygulamayı her iki hata ayıklama seçeneğiyle de denedim ve aynı şekilde davrandı.
Yani küçültülmüş versiyon beklediğim sırada değil ama çalışıyor.