ASP.NET捆绑和缩小 - 包括已生成的生产包和未开发文件的缩小文件

时间:2014-06-05 06:53:32

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

我想要一些关于ASP.NET MVC捆绑和缩小的专家建议。我的项目脚本文件中包含未明确的(.js)和缩小版本(.min.js)。我已将它们包含在我的脚本包中,如下所示:

bundles.Add(new ScriptBundle("~/bundles/layout").Include(
                    "~/Scripts/jquery-{version}.js",
                    "~/Scripts/lib/errorhandling.js",
                    "~/Scripts/lib/errorhandling.min.js",
                    "~/Scripts/vendor/modernizr.custom.js",
                    "~/Scripts/vendor/modernizr.custom.min.js",
                    "~/Scripts/toastr.js",
                    "~/Scripts/toastr.min.js"));

看起来捆绑包确实只包含一次每个脚本文件,而不是两次。我已经确认了这一点,无论是开发还是生产。 (作为旁注,在开发中,也就是说,当debug = true时,不会渲染包,但文件包含在单独的脚本标记中。这也是我想要的行为。)

我的问题是:

(1)这是最好的和推荐的方法,包括用于生产设置的已缩小文件和用于开发的未分析文件吗?

(2)ASP.NET是否尝试在生产中缩小整个包(即使它已经缩小)?如果是,阻止ASP.NET尝试缩小捆绑包的最佳方法是什么?

提前致谢!

2 个答案:

答案 0 :(得分:20)

无需在脚本包中专门包含缩小版本。默认情况下,MVC将搜索与.min.js匹配的文件并包含该文件(不完全确定它是否可以进一步缩小)。如果没有,它会创建一个缩小版本。您可以通过将以下内容添加到BundleConfig.cs

来测试
using System.Web.Optimization;

然后在结尾添加以下内容以覆盖开发中的debug=true

BundleTable.EnableOptimizations = true;

来自MS documentation

捆绑框架遵循几个常见的约定,例如:

  • 选择“.min”文件,以便在“FileX.min.js”和“FileX.js”时发布 存在。
  • 选择非“.min”版本进行调试。
  • 忽略“-vsdoc”文件(例如jquery-1.7.1-vsdoc.js),这些文件仅由 智能感知。

答案 1 :(得分:7)

无论是否缩小,捆绑功能对于脚本和css的逻辑分组非常有用,并且可以作为控制事物的单个位置。它还会生成唯一的URL,因此可以消除浏览器缓存问题。

如果你使用ScriptBundle,引擎会尝试缩小,(除非你设置了debug = true)。

您可以通过使用Bundle()而不是ScriptBundle()来关闭缩小,但保留捆绑。请参阅Martin的答案:

ASP.NET Bundles how to disable minification

另外,使用Bundle()而不是ScriptBundle()的预缩小文件将保留许可证头。使用jquery的MIT许可证,它至少规定不应删除它。我不确定如何解释默认的Microsoft MVC模板使用ScriptBundle()的事实。