仅在MVC4 BundleConfig中缩小脚本

时间:2012-10-26 13:08:00

标签: asp.net-mvc razor asp.net-mvc-4 bundle asp.net-optimization

我在BundleConfig中添加以下ScriptBundle:

    bundles.Add(new ScriptBundle("~/bundles/javascript").Include(
        "~/Scripts/jquery-1.*",
        "~/Scripts/load-image.min.js",
        "~/Scripts/bootstrap.*",
        "~/Scripts/bootstrap-image-gallery.*",
        "~/Scripts/my.global.js"));

这在我的_Layout.cshtml末尾被引用为:

@Scripts.Render("~/bundles/javascript")

调试时我注意到这个脚本渲染的输出是:

<script src="/Scripts/jquery-1.8.2.js"></script>
<script src="/Scripts/bootstrap.js"></script>
<script src="/Scripts/bootstrap-image-gallery.js"></script>
<script src="/Scripts/my.global.js"></script>

请注意,缺少load-image.min.js脚本?我想要的是使用相同的缩小脚本,无论我是否正在调试。在发布条件下,脚本包含在捆绑的JS文件中。

我认为它正在看'min',寻找一个未缩小的版本,没有找到一个,然后决定什么是最好的完全忽略它。辉煌。如果我复制了load-image.min.js,请将其命名为load-image.js,然后在BundleConfig中将其作为“load-image。*”引用。我发现它包含在两个配置中但是有什么意义去做?

我认为我在这里遗漏了一些东西。我没有非缩小版本,坦率地说我并不关心它。它被我的Bootstrap图像库插件使用,没有别的。那里有什么想法吗?

2 个答案:

答案 0 :(得分:5)

ignoreList,您可以根据需要清除,如下所示:

public static void AddDefaultIgnorePatterns(IgnoreList ignoreList)
{
    if (ignoreList != null)
    {
        ignoreList.Ignore("*.intellisense.js");
        ignoreList.Ignore("*-vsdoc.js");
        ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
        ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
        ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
        return;
    }
    else
    {
        throw new ArgumentNullException("ignoreList");
    }
}

更多详情:Advanced Options of ASP.NET Bundling and Minification

答案 1 :(得分:4)

此行为已在1.1.0-alpha1版本中得到改进(修复)。我们将所有旧的默认忽略列表条目移动到新的DirectoryFilter忽略列表中,该列表仅在包含* .js等搜索模式时使用,这些搜索模式是此功能的原始意图。因此,当您明确包含单个文件时,这应该不再是一个问题。

注意:如果您尝试包含类似jquery- {version} .min.js的内容,那么这可能仍然是一个问题。