ScriptBundle在调试模式下添加完整文件和缩小文件

时间:2013-09-06 17:30:15

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

我在BundleConfig.cs中定义了以下ScriptBundle -

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
          bundles.Add(new ScriptBundle("~/js/yepnope").Include(
                "~/Scripts/yepnope.{version}.js"));
       }
    }

它实际上并不是唯一的捆绑包,但这就是与问题相关的所有内容 - 其余的只是其他捆绑包定义。

处于web.config -

中设置的“调试”模式时
<compilation debug="true" targetFramework="4.5">

脚本的完整版本和缩小版本都会发送到浏览器 -

<script src="/Scripts/yepnope.1.5.4-min.js"></script>
<script src="/Scripts/yepnope.1.5.4.js"></script>

使用HTML帮助程序添加脚本,如此 -

@section HeadScripts
{
    @Scripts.Render("~/js/yepnope")
}

这是在Windows 7 Professional 64位上的Visual Studio 2012中运行的MVC4项目。

无论我做什么,我都无法让{version}通配符按照Microsoft documentation -

中的描述行事
  

注意:除非EnableOptimizations为true或者调试属性为   编译Web.config文件中的元素设置为false,文件   不会被捆绑或缩小。另外,.min版本   文件将不会被使用,将选择完整的调试版本

     

对于ASP.NET MVC 4,这意味着使用调试配置文件   jquery-1.7.1.js将被添加到包中。在一个版本中   配置,将添加jquery-1.7.1.min.js。捆绑   框架遵循几个常见的约定,例如:

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

上面显示的{version}外卡匹配用于   使用适当的版本自动创建一个jQuery包   您的Scripts文件夹中的jQuery。在此示例中,使用通配符   提供以下好处:

     
      
  • 允许您使用NuGet更新到更新的jQuery版本   在视图中更改前面的捆绑代码或jQuery引用   页面。
  •   
  • 自动选择调试配置的完整版本   以及发布版本的“.min”版本。
  •   

如果我添加“EnableOptimizations”,它似乎按预期运行。

有没有人注意到这个或找到了解决方案?

1 个答案:

答案 0 :(得分:5)

MVC4只知道如何处理.min.js文件。它无法识别-min.js(短划线)。

我通常这样做的方法很简单,就是摆脱提供.min.js和{{1}的库提供的任何-min.js.js文件}或.min.js。默认情况下,MVC会在您部署网站时自动缩小任何捆绑的-min.js文件,因此无需使用提供的.js.min.js文件。

这不一定是您特定问题的直接答案 - 这是完全规避问题的一种方法。