我想要一些关于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尝试缩小捆绑包的最佳方法是什么?
提前致谢!
答案 0 :(得分:20)
无需在脚本包中专门包含缩小版本。默认情况下,MVC将搜索与.min.js匹配的文件并包含该文件(不完全确定它是否可以进一步缩小)。如果没有,它会创建一个缩小版本。您可以通过将以下内容添加到BundleConfig.cs
来测试using System.Web.Optimization;
然后在结尾添加以下内容以覆盖开发中的debug=true
BundleTable.EnableOptimizations = true;
捆绑框架遵循几个常见的约定,例如:
答案 1 :(得分:7)
无论是否缩小,捆绑功能对于脚本和css的逻辑分组非常有用,并且可以作为控制事物的单个位置。它还会生成唯一的URL,因此可以消除浏览器缓存问题。
如果你使用ScriptBundle,引擎会尝试缩小,(除非你设置了debug = true)。
您可以通过使用Bundle()而不是ScriptBundle()来关闭缩小,但保留捆绑。请参阅Martin的答案:
ASP.NET Bundles how to disable minification
另外,使用Bundle()而不是ScriptBundle()的预缩小文件将保留许可证头。使用jquery的MIT许可证,它至少规定不应删除它。我不确定如何解释默认的Microsoft MVC模板使用ScriptBundle()的事实。