最近项目中用到了easy ui ,但是在配置BundleConfig 的时候出现了问题,easy ui的脚本jquery.easyui.min.js 压缩后出现各种脚本错误,总是莫名其妙的 i标量错误,xx未定义。其实在其他项目中也会遇到压缩后报错的问题,只是js文件比较小,直接在页面就引用了,不过easyui文件有700kb左右,直接引用会导致浏览器无法出现200 OK(from cache)缓存,增加http开销。

  百度,谷歌也没有太好的解决办法。只能自己想办法了,通过分析System.Web.Optimization源码,发现在资源合并前会对ScriptBundle应用Transforms。最后发现只要Bundle在加入 BundleCollection之前清空Transforms就不会在压缩原始资源了。

明白原理也有解决方案了,比如:

1.在 bundles.Add(...)前清空Bundle.Transforms:

  • 优点:简单,无需任何额外附件代码即可实现
  • 缺点:不能对Include(... ...)的每一项资源单独设定是否压缩
var scriptBundle=new ScriptBundle("~/Content/jquery.easyui/1.4.5/js").Include(
"~/Content/jquery.easyui/1.4.5/jquery.easyui.min.js",
"~/Content/jquery.easyui/1.4.5/locale/easyui-lang-zh_CN.js");
scriptBundle.Transforms.Clear();
bundles.Add(scriptBundle);

  

2.写一个扩展方法,清空Transforms并返回Bundle:

  • 优点:简单;
  • 缺点:不能对Include(... ...)的每一项资源单独设定是否压缩;
public static class BundleEx
{
public static Bundle NoMinify(this Bundle scriptBundle)
{
scriptBundle.Transforms.Clear();
return scriptBundle;
}
}
bundles.Add(new ScriptBundle("~/Content/jquery.easyui/1.4.5/js").Include(
"~/Content/jquery.easyui/1.4.5/jquery.easyui.min.js",
"~/Content/jquery.easyui/1.4.5/locale/easyui-lang-zh_CN.js").NoMinify());

  

3.自己继承 ScriptBundle重写Transforms逻辑,或者重写GenerateBundleResponse(BundleContext context)不应用Transform;

  • 优点:灵活,可以单独控制每个文件是否进行压缩;
  • 缺点:额外增加代码

Mvc 之System.Web.Optimization 压缩合并如何让*.min.js 脚本不再压缩的更多相关文章

  1. MVC 之 System.Web.Optimization找不到引用

    在MVC4的开发中,如果创建的项目为空MVC项目,那么在App_Start目录下没有BundleConfig.cs项的内容,在手动添加时在整个库中都找不到:System.Web.Optimizatio ...

  2. MVC 中 System.Web.Optimization 找不到引用

    在MVC4的开发中,如果创建的项目为空MVC项目,那么在App_Start目录下没有BundleConfig.cs项的内容,在手动添加时在整个库中都找不到:System.Web.Optimizatio ...

  3. System.Web.Optimization对脚本和样式表的操作

    这个也是本章重点向描述的部分,首先我们可以使用VS2012RC来新建一个MVC4.0项目,版本可以为4.0或4.5.在Global.asax文件代码中,我们发现已经把过滤器,路由器,以及对样式表和脚本 ...

  4. System.Web.Optimization 合并压缩技术的使用

    捆绑和压缩原理是:将多个css文件动态合并和压缩为一个css文件.多个js文件动态合并和压缩为一个js文件,如此达到减少浏览器对服务器资源文件的请求数量.缩小资源文件的尺寸来提高页面反应速度的目的.A ...

  5. 使用System.Web.Optimization对CSS和JS文件合并压缩

    在ASP.NET MVC 中JS/CSS文件动态合并及压缩通过调用System.Web.Optimization定义的类ScriptBundle及StyleBundle来实现. 大致步骤如下: 1.A ...

  6. 空MVC项目找不到System.Web.Optimization的处理办法

    install-package Microsoft.AspNet.Web.Optimization Create the bundle in Global.asax Application_Start ...

  7. MVC项目内无法添加System.Web.Optimization

    MVC项目内无法添加System.Web.Optimization Nuget:Install-PackageMicrosoft.AspNet.Web.Optimization

  8. .net mvc System.Web.Optimization 、System.Data.Entity.Infrastructure找不到

    在MVC4的开发中,如果在App_Start目录下BundleConfig.cs类没有找不到引用System.Web.Optimization,可以使用程序包管理控制台进行安装到使用的项目 打开 工具 ...

  9. MVC5手工添加System.Web.Optimization

    VS2012web手工添辑一个空的mvC5的项目,添加EF6的支持,在别的项目里复制了母版页_Layout.cshtml过来,发现Styles.Render未引用,这个引用使用的命名空间是System ...

随机推荐

  1. angularjs之Restangular用法

    参考资料: angularjs 获取服务端口数据的方法(三种) 学习-[前端]-angularjs基本框架以及向服务器发送请求的方法 Restangular on Angular

  2. 锁(MySQL篇)—之MyISAM表锁

    前言 锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  3. 关于MapReduce中自定义Combine类(一)

    MRJobConfig      public static fina COMBINE_CLASS_ATTR      属性COMBINE_CLASS_ATTR = "mapreduce.j ...

  4. 同步(Synchronous)和异步(Asynchronous)

    目录 概念性 图示例 举个例子 回到顶部 概念性 同步和异步通常用来形容一次方法调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步方法调用更像一个消息传递,一旦开始 ...

  5. java文件上传

    jsp界面代码: <body>  <form action="servlet/UploadServlet" enctype="multipart/for ...

  6. 安装 sublime2 (包括插件)

    1.下载地址:http://www.sublimetext.com/2,注意选择不同的平台: 2.安装后,打开sublime,在菜单栏  help -- enter license 打开一个窗口,复制 ...

  7. bzoj violet系列 (2708~2725)

    cbh大爷说:写博客不能弃坑. orz cbh 那我就来更新博客了. violet这个系列的题好神啊……出题人好劲啊…… ……怎么最近都在理性愉悦啊…… 另外bzoj400题纪念~ 2708: [Vi ...

  8. sublime自动生成头部注释

    1.在tool->new snippet-创建一个新的snippet sublime text2 用snippet 创建文件头部信息 Snippets are smart templates t ...

  9. C#接口的作用(经典)

    C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就 ...

  10. sql查删更

    //查询#SELECT * FROM user_cawefwfrd where usewwr_cawrqqd_qaid=2252227//删除#DELETE FROM user_cauyuyurd w ...