【发布时间】:2012-08-12 08:42:50
【问题描述】:
我正在试用MVC4 System.Web.Optimization 1.0 ScriptBundle feature。
我有以下配置:
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 应用程序,但它引用了优化框架预发布包。我删除了它并从http://nuget.org/packages/Microsoft.AspNet.Web.Optimization 添加了RTM 包。对于 web.config 中带有 debug=true 的 RTM 版本,@Scripts.Render("~/bundles/scripts/canvas") 以正确的顺序呈现各个脚本标签。
在 web.config 中使用 debug=false 时,组合脚本首先具有成就.js 脚本,但由于它是稍后调用的函数定义(对象构造函数),因此它运行时不会出错。也许 minifier 足够聪明,可以找出依赖关系?
我还尝试了 Darin Dimitrov 建议的 IBundleOrderer 实现,带有两个调试选项的 RTM,它的行为相同。
所以缩小版不是我期望的顺序,但它可以工作。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-4 bundle asp.net-optimization