我尝试使用 Google Closure Compiler 编译我的JS + jQuery脚本。它可以通过简单的优化选项正常工作。但是,当我切换到高级优化时会出现一些错误。
例如,它将jQuery $。ajax()方法更改为 $。i()。这简直让浏览器变得疯狂。
有关为何发生这种情况的任何想法?
答案 0 :(得分:2)
高级优化会破坏名称,包括属性访问。为了使用高级优化,您必须专门为编写代码。在为闭包编译器编写的大量library code结束时,您将看到如下所示的内容:
window['MarkerClusterer'] = MarkerClusterer;
MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker;
MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers;
MarkerClusterer.prototype['clearMarkers'] = MarkerClusterer.prototype.clearMarkers;
或简化示例
window['myLibraryName'] = myLibrary;
myLibrary['someMethod'] = myLibrary.someMethod;
原因是编译器显然不会破坏字符串文字,现在可以通过myLibrary
对象正确导出这些名称。
因此,除非专门编写jQuery(或任何其他库)以使用该功能,否则您无法使用高级优化。这是一个经常被封闭编译器批评的批评。 OTOH,这是google为自己编写的代码,用于自己的代码库,并且非常好,可以免费提供给我们,所以...