2010-07-26 72 views
2

可能重复:
jQuery compiled with Google Closure CompilerGoogle Closure中的外部jQuery编译JS?

我的标记:

<script src="http://somecdn.com/jquery-1.4.2.min.js"></script> 
<script src="/js/mycode.closure_compiled.js"></script> 

我的代码:

goog.provide("mycode"); 

mycode.foo = function() { 
    jQuery("#ajaxSpinner").show(); 
    jQuery.get("/ajax/foo", function() { /* ... */ }); 
} 

我想我的编译使用Google Closure编译器进行高级优化。

如何实现以下目标?

  1. 编译器不应该重命名“jQuery”和“jQuery.get”。
  2. 编译器不应该抛出错误或警告(例如“未知类型'jQuery'”)。
+0

jQuery不是开箱即用的外部兼容,所以你不能使用像你这里需要的'--externs'参数......你需要一个extern兼容的jQuery构建,我不确定是否有人完成了这些。 – 2010-07-26 11:52:00

+0

我知道你想进行优化,但作为参考,你可以在这个网站做一个简单的优化:http://closureoptimizer.com/ – Mottie 2010-07-26 14:41:26

回答

4

您将不得不使用externs。这些文件告诉编译器你的代码中哪些符号来自外部代码,因此不应该重命名。基本上你必须用--externs标志指定一个extern。一些third-party extern files像jQuery可在项目源代码中找到。

+3

这是正确的方法 - 命令行示例:java -jar compiler.jar --externs jquery-1.6.js --js jquery-1.6.2.js --js test.js --compilation_level ADVANCED_OPTIMIZATIONS --js_output_file output.js – 2011-10-19 23:08:49

+0

Grand!但jQuery文件不应该被编译。命令行示例[已更新]:java -jar compiler.jar --externs jquery-1.6.js --js test.js --compilation_level ADVANCED_OPTIMIZATIONS --js_output_file output.js – 2012-02-07 11:31:11

0

jQuery与高级模式下的Closure编译器不兼容。实际上,在流行的JavaScript库中,只有Dojo Toolkit兼容(请参阅下面的链接)。

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

不过,如果你只是想使用jQuery与关闭编译高级模式不重命名,还有,我已经随着时间的推移开发了一个绝招:

  • 提供您的库文件(即jquery.js)作为编译器的“外部”

编译器不会重命名jQuery使用的任何东西。当然,你自己的代码应该始终是Closure兼容的。另外,编译后的输出结果可能仍然不正确,并且可能有一些您需要解决的晦涩的错误。

实际上,这是我在使用Dojo进行Closure高级模式之前,最终厌倦了它,并进行了必要的修改以获得Dojo兼容性。