Asp.net mvc 4 MVC捆绑和缩小

Asp.net mvc 4 MVC捆绑和缩小,asp.net-mvc-4,bundling-and-minification,Asp.net Mvc 4,Bundling And Minification,当文件的本地缩小版本存在或不存在时,绑定/缩小的预期行为是什么 我假设,当找到一个local.min.js文件时,它将在优化发布时使用该文件,如果调试,它将使用另一个。当针对发行版进行优化但没有找到.min.js文件时,我认为它会相应地缩小该文件 然而,我发现,尽管我的脚本文件夹中有一个.min.js文件,但在发行版中捆绑包中输出的文件与此不同——它已被更改 我应该补充的是,这些已经作为scriptbundle添加到Bundle.config中,并且所有转换/忽略列表等都保留为默认值 问题出现在

当文件的本地缩小版本存在或不存在时,绑定/缩小的预期行为是什么

我假设,当找到一个local.min.js文件时,它将在优化发布时使用该文件,如果调试,它将使用另一个。当针对发行版进行优化但没有找到.min.js文件时,我认为它会相应地缩小该文件

然而,我发现,尽管我的脚本文件夹中有一个.min.js文件,但在发行版中捆绑包中输出的文件与此不同——它已被更改

我应该补充的是,这些已经作为scriptbundle添加到Bundle.config中,并且所有转换/忽略列表等都保留为默认值

问题出现在第三方库(如jQuery)的情况下。我不希望他们提供的文件通过捆绑过程缩小,只是为了使用已经提供的缩小文件


谢谢。

默认情况下,使用ScriptBundle类注册脚本包时,所有包含的文件都将再次缩小,而不管.min.js如何。原因是ScriptBundle使用了一个特定的IBundleTransform实现,它总是缩小javascript文件

要覆盖此行为,可以使用虚拟实现:

public class NoTransform : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
    }
}
注册捆绑包:

bundles.Add(new Bundle("~/bundles/jquerynotransform", new NoTransform()).Include("~/Scripts/jquery-{version}.js"));

你的假设是正确的

如果存在本地精简版本,则在绑定时,将使用该版本。它将再次进行缩小,您可以看出这一点,因为它删除了jQuery要求您必须保留的许可注释,如中所述,并且还可以重命名变量

如果本地缩小版本不存在,则将使用未缩小版本,该版本将进行捆绑/缩小


因此,在这两种情况下,它都将被缩小。

您可以缩小jquery版本,这样做的好处是,当您这样做时,您可以确保文件在那里,但您也可以添加对缩小版本的引用,这样可能会有人删除它,您将失去jquery。拥有完整jquery的原因是,您可以在dev中调试它并部署缩小的jquery,对于高级用户,您也可以将其更改为执行您不希望执行但仍然可能感兴趣的操作。谢谢你的反馈。在我的例子中,当我发现函数“ready”未定义时,似乎缩小破坏了jQuery文件。@obaylis很有趣。不能说我见过这种情况发生。它只是让我思考缩小过程如何避免这种情况?对于jQuery,您不希望任何核心函数名被缩小/更改。