2

可能重复:
使用 Google Closure Compiler 编译的 jQuery

我的标记:

<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 Compiler 使用高级优化来编译我的代码。

我如何实现以下目标?

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

2 回答 2

4

您将不得不使用externs。这些文件告诉编译器代码中的哪些符号来自外部代码,因此不应重命名。基本上,您必须使用--externs标志指定一个外部。项目源代码中提供了一些第三方外部文件(如 jQuery)。

于 2010-12-21T14:28:01.497 回答
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 与 Closure Compiler Advanced 模式一起使用,那么我随着时间的推移开发了一个技巧:

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

编译器不会重命名 jQuery 使用的任何内容。当然,您自己的代码应该始终与 Closure 兼容。此外,您的编译输出可能仍然无法正常工作,并且可能有一些您需要解决的模糊错误。

事实上,在我最终厌倦它并进行必要的修改以使 Dojo 兼容之前,这就是我过去常常将 Dojo 与 Closure Advanced 模式一起使用的方式。

于 2011-03-10T12:43:27.137 回答