Rem*_*emy 30 asp.net jquery modernizr bundling-and-minification
我们正在使用ASP.NET Web Optimization Framework进行捆绑和缩小.一个包只包含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"));
Run Code Online (Sandbox Code Playgroud)
我们在目录中有jquery-1.9.0.js和jquery-1.9.0.min.js.如果没有.min文件,优化框架将自动生成一个.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'))
);
*/
Run Code Online (Sandbox Code Playgroud)
awj*_*awj 73
我确定您的问题的原因是jquery-1.9.0.min.js的最后一行:
//@ sourceMappingURL=jquery.min.map
Run Code Online (Sandbox Code Playgroud)
jQuery 1.9的未公开版本不包含此内容.我会在一分钟内解释原因.
我注意到自己,当jquery-1.9.0.min.js与另一个文件捆绑在一起 - 而另一个文件跟在 jquery-1.9.0.min.js之后 - 那么下面的JS文件就是说,损坏.
原因是以下文件的开头被附加到jQuery 的" // @ "行,这意味着它随后成为一个长的扩展注释.在你的情况下,这意味着
window.Modernizr=function(n,t,i){function...
Run Code Online (Sandbox Code Playgroud)
在Modernizr开始时的脚本从捆绑过程中输出作为评论如下:
//@ sourceMappingURL=jquery.min.map window.Modernizr=function(n,t,i){function...
Run Code Online (Sandbox Code Playgroud)
有一个在jQuery的Bug跟踪讨论关于这一点.
您可以选择删除最后一行或将其包装在多行注释符号中:
/*
//@ sourceMappingURL=jquery.min.map
*/
Run Code Online (Sandbox Code Playgroud)
此外,您可以看到Modernizr还在其缩小版本的末尾包含源映射.并有充分的理由.
其背后的基本原理是在使用缩小版本的代码时帮助您调试问题.该行告诉浏览器这个缩小的文件映射到另一个可以帮助调试的文件.要利用这一点,您需要在服务器上拥有该引用文件(jquery.min.map)或下载到客户端.另外,我相信Chrome是目前支持此功能的唯一浏览器; 它仍在Firefox中开发.
此页面对源地图有很好的解释.
总而言之,删除它不应该真正导致任何问题,除非您希望在浏览器中调试时映射回源的原始版本.在您的情况下,由于ASP.NET的优化框架的工作方式,当debug ="True"时,无论如何它都将提供未编译的版本,因此您可能不需要使用sourceMappingURL.
我无法回复上面的awj的回答,所以我只是投票了.神奇的侦探工作.我想补充一点评论,虽然问题确实在jquery 1.9.1中修复了,但它现在出现在jquery-migrate-1.1.0中
我注意到地图文件引用只是"jquery-migrate-1.1.0.min.js"文件末尾的单行注释.因此,根据awj的建议,我做了一个多行评论.
所以第3行:
//@ sourceMappingURL=dist/jquery-migrate.min.map
Run Code Online (Sandbox Code Playgroud)
现在成为第3,4和5行如下:
/*
//@ sourceMappingURL=dist/jquery-migrate.min.map
*/
Run Code Online (Sandbox Code Playgroud)
一旦我上传回我的ISP,我再次拥有完整的ajax功能.
再次感谢AWJ,这大大帮助了!
| 归档时间: |
|
| 查看次数: |
8614 次 |
| 最近记录: |