2016-03-30 16 views
0

Googleクロージャコンパイラを使用してjQuery 2.0.0をコンパイルします。私がthis externを使用してそれを行うときExterns for jQuery 1.9 - 1.11 & 2.0 - 2.1GoogleクローズコンパイラでjQueryをコンパイルするとUncaught TypeErrorが発生する

私は次のエラーを受け取ります: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"); 

誰かがjQueryの後のバージョンで動作するようにexternを修正する方法を知っていたのですか?

+0

[GoogleクロージャコンパイラでJqueryを動作させる方法](http://stackoverflow.com/questions/16461915/how-to-make-jquery-work-with-google-closure-compiler) –

答えて

0

使用しているエクスターナルでは、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)); 

あなたの外部宣言が閉鎖コンパイラで作業しているかどうかを示す助けなければならないこと。

また、デバッグでは、単純なコンパイルを使用するか、コンパイルしない方が適しています。

externが完全ではない可能性があります。独自のコピーを作成して編集することができます。しかし、私はあなたがコンパイラを再構築する必要があると思います(私はexternsがcompiler.jarファイルの一部になると信じています)。

+0

Externs質問者がjQueryのソースをコンパイルしています。 jQueryソースは、コンパイラのADVANCED_OPTIMIZATIONSモードと互換性がありません。 –

+0

これは、なぜ私が 'jQuery.expr'を見つけなかったのかを説明しています。合意された、jQueryのソースはClosure Compilerでコンパイルされません。私はあなたがClosure Compilerでコンパイルされた自分のコードと一緒にコンパイルされていない外部コードとしてjQueryを使うことができると信じています。 – owler

関連する問題