MVC捆绑和缩小

时间:2014-10-01 13:47:36

标签: asp.net-mvc-4 bundling-and-minification

当文件的本地缩小版时,捆绑/缩小的预期行为是什么?

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

但是,我发现尽管我的脚本文件夹中有一个.min.js文件,但是在bundle(在发行版中)输出的文件与之相同 - 它已被更改。

我应该补充一点,这些已经在Bundle.config中添加为ScriptBundles,并且所有转换/忽略列表等都保留为默认值。

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

感谢。

2 个答案:

答案 0 :(得分:0)

默认情况下,使用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"));

答案 1 :(得分:0)

您的假设是正确的。

如果存在本地缩小版 ,则在发生捆绑时,即将使用的版本。 再次进行缩小,你可以告诉它,因为它删除了jQuery说你必须保留的许可注释(详见How can I preserve comments that matter in MVC 4 style bundling?),也可以重命名变量。

如果本地缩小版 不存在,那么它将使用未经分类的版本,该版本将通过捆绑/缩小。

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