我们使用ASP.NET Web优化框架与捆绑和缩小。
一个包只包含jquery和modernizr。这一切工作正常与jquery 1.8.3但是,因为我们更新到1.9.0组合jquery / modernizer包不工作了。
一个包只包含jquery和modernizr。这一切工作正常与jquery 1.8.3但是,因为我们更新到1.9.0组合jquery / modernizer包不工作了。
bundles.Add(new ScriptBundle("~/st-scripts-load-first.js") .Include("~/Resources/JavaScript/jquery-1.9.0.js","~/Resources/JavaScript/modernizr.form-placeholder.js"));
我们在目录中有jquery-1.9.0.js和jquery-1.9.0.min.js。如果没有.min文件,优化框架将自动生成一个。如果.min文件存在或不存在,它不工作。
它的工作原理如果编译debug =“true”,没有缩小或捆绑。
/* Minification Failed. Returning unminified contents. (5,2-3): run-time warning JS1195: Expected expression: * (11,60-61): run-time warning JS1004: Expected ';': { (395,2-3): run-time warning JS1195: Expected expression: ) (397,21-22): run-time warning JS1004: Expected ';': { (397,4590-4591): run-time warning JS1195: Expected expression: ) (398,28-29): run-time warning JS1195: Expected expression: ) (398,84-85): run-time warning JS1002: Syntax error: } (402,44-45): run-time warning JS1195: Expected expression: ) (408,1-2): run-time warning JS1002: Syntax error: } (393,5-22): run-time warning JS1018: 'return' statement outside of function: return Modernizr; (404,5,406,16): run-time warning JS1018: 'return' statement outside of function: return !!('placeholder' in (Modernizr.input || document.createElement('input')) && 'placeholder' in (Modernizr.textarea || document.createElement('textarea')) ); */
解决方法
我确信你的问题的原因是jquery-1.9.0.min.js的最后一行:
//@ sourceMappingURL=jquery.min.map
jQuery 1.9的unminified版本不包含这个。我会解释为什么在一分钟。
我注意到自己,当jquery-1.9.0.min.js与另一个文件绑定 – 那个其他文件跟随jquery-1.9.0.min.js – 然后下面的JS文件,在一种说法,损坏。
原因是,以下文件的开头被追加到jQuery的“// @”行,这意味着它将成为一个长的扩展注释。在你的情况下,这意味着
window.Modernizr=function(n,t,i){function...
脚本在Modernizr的开始是作为一个注释从捆绑过程输出如此:
//@ sourceMappingURL=jquery.min.map window.Modernizr=function(n,i){function...
有一个discussion on jQuery’s Bug Tracker这个。
您的选项是删除最后一行或将其包装在多行注释符号中:
/* //@ sourceMappingURL=jquery.min.map */
此外,您可以看到Modernizr在其缩小版本的末尾还包含源映射。有很好的理由。
其基本原理是帮助您在使用缩小版本的代码时调试问题。这行告诉浏览器这个缩小的文件映射到另一个文件,可以帮助调试。要利用这一点,您需要在服务器上或者下载到客户端具有引用的文件(jquery.min.map)。此外,我相信Chrome是目前唯一支持此功能的浏览器;它仍然在Firefox的开发。
This page有一个很好的解释源地图。
所以总的来说,删除它不应该真正导致任何问题,除非你想映射回源的原始版本,同时在浏览器中调试。在你的情况下,由于ASP.NET的优化框架的工作方式,当debug =“True”它将提供未分类的版本,所以你可能不需要使用sourceMappingURL。