我正在尝试使用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语句到bundle的顺序?
更新
这是一个相对较新的ASP.NET MVC 4应用程序,但它引用了优化框架预发布软件包。我将其删除并添加了来自http://nuget.org/packages/Microsoft.AspNet.Web.Optimization的RTM软件包。使用带有debug=true的RTM版本在web.config中,@Scripts.Render("~/bundles/scripts/canvas")
以正确的顺序呈现单独的脚本标记。
在web.config中debug=false的情况下,组合的脚本具有先出现achievements.js脚本,但由于它是稍后调用的函数定义(对象构造函数),因此它会顺利运行而没有错误。也许缩小器足够智能,可以解决依赖性问题?
我还尝试了Darin Dimitrov建议的使用IBundleOrderer
实现的RTM和两个调试选项,它的行为相同。
因此,缩小版本的顺序不是我期望的顺序,但它可以正常工作。