我正在尝试 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 是 bundle 源中的第一个脚本。它取决于 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 时,组合脚本首先具有 results.js 脚本,但由于它是稍后调用的函数定义(对象构造函数),因此它运行时不会出错。也许 minifier 足够聪明,可以找出依赖关系?

我还尝试了 IBundleOrderer 实现,Darin Dimitrov 建议使用带有两个调试选项的 RTM,它的行为相同。

所以缩小版本不是我期望的顺序,但它有效。

最佳答案

我在 RTM 位上没有看到这种行为,您是否使用 Microsoft ASP.NET Web Optimization Framework 1.0.0 位:http://nuget.org/packages/Microsoft.AspNet.Web.Optimization

我对您的示例使用了类似的复制品,基于一个新的 MVC4 Internet 应用程序网站。

我添加到 BundleConfig.RegisterBundles:

        Bundle canvasScripts =
            new ScriptBundle("~/bundles/scripts/canvas")
                .Include("~/Scripts/modernizr-*")
                .Include("~/Scripts/Shared/achievements.js")
                .Include("~/Scripts/Shared/canvas.js");
        bundles.Add(canvasScripts);

然后在默认索引页面中,我添加了:
<script src="@Scripts.Url("~/bundles/scripts/canvas")"></script>

我验证了在包的缩小的 javascript 中,performance.js 的内容是在 Modernizr 之后......

关于asp.net-mvc - 如何指定显式的 ScriptBundle 包含顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11979718/

10-17 00:54