使用jQuery进行高级Google Closure编译器优化

时间:2018-02-14 10:21:35

标签: javascript jquery minify

我尝试使用 Google Closure Compiler 编译我的JS + jQuery脚本。它可以通过简单的优化选项正常工作。但是,当我切换到高级优化时会出现一些错误。

例如,它将jQuery $。ajax()方法更改为 $。i()。这简直让浏览器变得疯狂。

有关为何发生这种情况的任何想法?

1 个答案:

答案 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为自己编写的代码,用于自己的代码库,并且非常好,可以免费提供给我们,所以...