jquery 1.9.0和modernizr不能用ASP.NET Web优化框架缩小
我们使用的是ASP.NET Web优化框架,具有捆绑包和缩小功能。 一个bundle只包含jquery和Modernizer。这一切在jquery 1.8.3中都很好,但是自从我们更新到1.9.0之后,jquery/modernizer组合包就不再工作了jquery 1.9.0和modernizr不能用ASP.NET Web优化框架缩小,jquery,asp.net,modernizr,bundling-and-minification,Jquery,Asp.net,Modernizr,Bundling And Minification,我们使用的是ASP.NET Web优化框架,具有捆绑包和缩小功能。 一个bundle只包含jquery和Modernizer。这一切在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",
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文件在那里或不在那里,它将不起作用。如果compilation 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'))
);
*/
您的modernizr.form-placeholder.js副本可能有问题 我只是在加载jquery.peity.js时遇到了同样的错误
当我删除库时,页面加载良好。所以我就从他们的网站上抓取了原始的js,重新制作了文件,加载时没有任何问题 我确信问题的原因是jquery-1.9.0.min.js的最后一行:
//@ sourceMappingURL=jquery.min.map
jQuery 1.9的未统一版本不包含此项。我马上解释原因
我注意到,当jquery-1.9.0.min.js与另一个文件捆绑在一起时——而另一个文件紧跟在jquery-1.9.0.min.js之后——那么从某种意义上说,下面的js文件已经损坏
原因是以下文件的开头被追加到jQuery的“/@”行,这意味着它将成为一条长的扩展注释。在你的情况下,这意味着
window.Modernizr=function(n,t,i){function...
Modernizer开始时的脚本作为注释从捆绑过程中输出,如下所示:
//@ sourceMappingURL=jquery.min.map window.Modernizr=function(n,t,i){function...
关于这件事,有一个很好的解释
您可以选择删除最后一行或将其包装为多行注释符号:
/*
//@ sourceMappingURL=jquery.min.map
*/
此外,您可以看到Modernizer在其缩小版本的末尾还包含一个源映射。而且有很好的理由
它背后的基本原理是帮助您在使用代码的简化版本时调试问题。这一行告诉浏览器,这个缩小的文件映射到另一个文件,这有助于调试。要利用这一点,您需要将该引用文件(jquery.min.map)放在服务器上或下载到客户端。另外,我相信Chrome是目前唯一支持这一功能的浏览器;Firefox仍在开发中
对源地图有很好的解释
因此,总之,删除它不会真正给您带来任何问题,除非您希望在浏览器中调试时映射回源代码的原始版本。在您的情况下,由于ASP.NET的优化框架的工作方式,当debug=“True”时,它将提供未统一的版本,因此您可能不需要使用sourceMappingURL。我无法回答awj上面的答案,所以我只是投了赞成票。这是一件了不起的侦探作品。我想补充一点,虽然这个问题在jQuery1.9.1中确实得到了解决,但现在它显示在jquery-migrate-1.1.0中 我注意到地图文件引用只是“jquery-migrate-1.1.0.min.js”文件末尾的一行注释。因此,根据awj的建议,我提出了多行评论 因此,第3行:
//@ sourceMappingURL=dist/jquery-migrate.min.map
现在变为第3、4和5行,如下所示:
/*
//@ sourceMappingURL=dist/jquery-migrate.min.map
*/
一旦我上传回我的ISP,我又有了完整的ajax功能
再次感谢AWJ,这帮了大忙 阅读答案,甚至是公认的答案,建议解决此问题的方法是修改脚本,这样捆绑程序就不会遇到问题。这对我来说毫无意义,这显然是bundler没有正确连接不同脚本的错误,特别是当n脚本的最后一行是正常的行注释时,bundler有问题
// this is the last line of the n script
function(){ var ...
然后,您的下一个脚本不会以单行注释开头
// this is the last line of the n script
function(){ var ...
捆绑机默认配置为
作为ConcatenationToken
的一部分,因此绑定的代码最终是这样的:
// this is the last line of the n script;function(){ var ...
脚本加载肯定会失败,并在某个地方出现语法错误
有人建议将脚本的最新一行修改为非内联注释,使其成为多行注释,因此当代码以*/
结尾时,解析器可以在其后面添加函数声明或其他内容
我不喜欢修改我的脚本,许多脚本是由其他人编写的(jquery等),我不想修改它们,如果我必须升级它们,并且在升级网站后会再次发现此错误,并且它不会在配置中运行debug=“true”
,该怎么办
我带来的这个解决方案对我来说更有效
bundles.Add(new ScriptBundle("~/bundles/mobile") {
ConcatenationToken = ";\r\n" }
.Include("~/Scripts/jquery-1.11.3*",
"~/Scripts/jquery-timeago*",
"~/Scripts/jquery.mobile-1.4.5*",
通过这种方式,我们强制绑定器始终使用新行字符分隔脚本。默认情况下,当上一个脚本的最后一行是单行注释时,它应该这样做。您使用的是
1.9.min
而不是1.8.3
?到底什么不再起作用了?目录中同时有1.9和1.9.min。如果debug=false,绑定框架将自动使用.min。我已经更新了问题的更多细节和缩小框架生成的错误代码。您是否尝试过:Include(“~/Resources/JavaScript/jquery-{version}.js”)?我也有同样的问题。看起来Minifier无法处理jQuery 1.9.0甚至jQuery迁移。如果您自己缩小了文件,那么是的,缩小的版本可能不会包含源映射引用。sourceMappingURL仅包含在某些缩小引擎和它的声音中,而不包含在您使用的引擎中。已在jquery中修复,但未在jquery中修复。迁移:(Village,谢谢你的提醒。修复方法与jQuery相同。在jQuery末尾的sourceMapping周围添加/**/标记。migrate.min.jsI假设你最终需要注释以进行调试,但我很惊讶优化器在任何情况下都没有完全删除单行注释,但我不会