谷歌闭包编译器和jQuery

11

我将我的 js 代码复制粘贴到谷歌编译器中,但当我把它复制回我的应用程序时,它无法工作。我意识到我的代码需要jquery,所以我将jquery代码和我的代码一起复制到谷歌编译器中,希望它可以轻松解决问题,但仍然不起作用。

在Chrome浏览器中,在文档准备好的函数(document ready function)那一行代码 $(document).K(function () { 出现了错误。错误是 Uncaught TypeError: Object [object Object] has no method 'K'

我需要做什么才能使其(暂时)工作?

感谢您的建议。


你是使用高级代码压缩还是简单的?如果使用简单的话,就不需要将jquery复制到编译器中。 - Kevin B
你说得对,我应该说明我正在使用高级编译。 - frenchie
K 不是 jQuery 函数。应该是 ready - MacMac
1个回答

20

使用@externs_url在Google的Closure编译器中“导入”符号:

// @externs_url https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jquery-1.9.js

我建议使用在contrib/externs中定义的外部变量之一,它只包含所有方法的名称。

示例

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @externs_url https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jquery-1.9.js
// ==/ClosureCompiler==
$(document).ready(function(){alert(0);});  // Input

输出:

$(document).ready(function(){alert(0)});

当我尝试运行上面的输出时,我得到了一个错误:'未捕获的引用错误:$未定义'。 - Erik
@Erik 输出并不会神奇地包含整个90kB的jQuery。在使用缩小器之前,您需要加载jQuery才能使用它。例如,使用<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> - Rob W
1
谢谢您的帮助,但我认为我可以将jQuery与我的代码编译在一起。如果我添加window['jQuery'] = window['$'] = jQuery;,它会起作用。 - Erik
嗨,我想了解更多关于你所谓的“符号”和“外部变量”的内容...我去了Github页面,但没有找到相关信息... - TOPKAT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接