Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery 1.9.0和modernizr不能用ASP.NET Web优化框架缩小_Jquery_Asp.net_Modernizr_Bundling And Minification - Fatal编程技术网

jquery 1.9.0和modernizr不能用ASP.NET Web优化框架缩小

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",

我们使用的是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",
                "~/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假设你最终需要注释以进行调试,但我很惊讶优化器在任何情况下都没有完全删除单行注释,但我不会