我在试 MVC4 System.Web.Optimation1.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 语句的顺序?
更新
这是一个相对较新的 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 时,组合脚本首先具有 achiements.js 脚本,但是由于它是后面调用的函数定义(对象构造函数) ,所以运行时没有错误。也许缩小器足够聪明,能够找出依赖关系?
我还尝试了 Darin Dimitrov 在 RTM 中提出的带有两个调试选项的 IBundleOrderer
实现,结果表现相同。
所以这个缩小版并不是我所期望的顺序,但是它确实有效。