我想使用Google Closure Compiler编译jQuery 2.0.0
。当我使用this extern表示Externs for jQuery 1.9 - 1.11 & 2.0 - 2.1
我收到以下错误:Uncaught TypeError: Cannot read property 'source' of undefined
。这标志着下面的编译代码:
d.each(d.i.match.ja.source.match(/\w+/g), function(a, b) {
var c = ra[b] || d.find.attr;
ra[b] = function(a, b, d) {
var h, k;
d || (k = ra[b],
ra[b] = h,
h = null != c(a, b, d) ? b.toLowerCase() : null,
ra[b] =
k);
return h
}
});
该代码在非编译代码中对应于此处:
jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function(i, name) {
var getter = jQuery.expr.attrHandle[name] || jQuery.find.attr;
jQuery.expr.attrHandle[name] = getSetInput && getSetAttribute || !ruseDefault.test(name) ?
function(elem, name, isXML) {
var fn = jQuery.expr.attrHandle[name],
ret = isXML ?
undefined :
/* jshint eqeqeq: false */
(jQuery.expr.attrHandle[name] = undefined) !=
getter(elem, name, isXML) ?
name.toLowerCase() :
null;
jQuery.expr.attrHandle[name] = fn;
return ret;
} :
function(elem, name, isXML) {
return isXML ?
undefined :
elem[jQuery.camelCase("default-" + name)] ?
name.toLowerCase() :
null;
};
});
以下是我进入在线闭包编译器的内容:
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @code_url https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.js
// @externs_url https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jquery-1.9.js
// ==/ClosureCompiler==
// ADD YOUR CODE HERE
$("#foo").html("Example Text");
我想知道是否有人知道如何修复extern以便它可以与更高版本的jQuery一起使用,或者是否有可用于以后版本的extern?
答案 0 :(得分:0)
您使用的extern未在任何地方定义expr
。 (我找不到jQuery.expr
的在线文档,你确定它是jQuery的一部分吗?)。
我建议在代码开头添加一些“健全性检查”,如下所示:
goog.require('goog.asserts');
goog.asserts.assert(goog.isFunction(jQuery.each));
goog.asserts.assert(goog.isObject(jQuery.expr));
goog.asserts.assert(goog.isObject(jQuery.expr.match));
goog.asserts.assert(goog.isObject(jQuery.expr.match.bool));
goog.asserts.assert(goog.isObject(jQuery.expr.match.bool.source));
goog.asserts.assert(goog.isFunction(jQuery.expr.match.bool.source.match));
这应该有助于显示您的外部人员是否正在使用Closure Compiler。
另外,对于调试使用simple-compile,甚至更好地运行uncompiled。
extern可能不完整,您可以自己制作副本并进行编辑。但我想你需要重建编译器(我相信externs会成为compiler.jar文件的一部分)。