4

Google クロージャ コンパイラをテストしていて、 facebox プラグインをオプション "Advanced" でコンパイルしたいのですが、関数が "aH" を検索しようとするとエラーが発生します。

このオプションのjQueryプラグインをコンパイルして良い結果を得ようとした人はいますか?

ありがとうございました。

編集: 明らかにこれはjQueryメソッドの名前を変更していますが、jQueryを含めてすべてのメソッドの名前を同じように変更することは可能ですか?.

編集

オプション「externs_url」を使用したコードの例:

クロージャコンパイラを使用

js 入力コード

// ==ClosureCompiler==
// @output_file_name default.js
// @formatting pretty_print
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level QUIET
// @externs_url http://code.jquery.com/jquery-1.5.min.js
// ==/ClosureCompiler==

// ADD YOUR CODE HERE

var test = function($, context) {

  var
    _self = this;

  _self.mymethod = function() {

    var lista = $("a", context);

    lista.attr("target", "_blank");

    return lista.html();

  };


  return {"mymethod":_self.mymethod};

}.call({}, jQuery, context);    

js出力コード

(function(b, c) {
  this.a = function() {
    var a = b("a", c);
    a.attr("target", "_blank");
    return a.html()
  };
  return{mymethod:this.a}
}).call({}, jQuery, context);
4

6 に答える 6

5

jQuery ライブラリ自体を でコンパイルすることはできませんがADVANCED_OPTIMIZATIONS、jQuery API 全体を指定する Closure Compiler externs ファイルを使用して、高度な最適化を使用して独自のコードをコンパイルできます。お使いの jQuery バージョンに関連する externs ファイルをClosure Compiler リポジトリからダウンロードします。この例では、バージョン 1.4.3 を使用します

以下では、アプリケーションのコードがGoogle Closure Compiler jar ファイル (この zip ファイルapplication.jsで入手可能) にあると想定しています。compiler.jar

java -jar compiler.jar \
--compilation_level ADVANCED_OPTIMIZATIONS \
--externs jquery-1.4.3.externs.js \
--js_output_file output.js \
application.js

externs ファイルは、どの jQuery メソッドが存在するかを Closure Compiler に伝え、名前を変更しないようにします。

于 2010-12-03T23:03:04.030 に答える
4

jQueryプラグインのカスタムJSライブラリを圧縮しようとしたときに同じ問題が発生しました。クロージャ(そうしない理由を与えない限り)は、プラグイン内からのjQueryライブラリ呼び出しの名前を変更するだけです。さらに悪いことに、警告すらされません(どうすればそれができますか?プログラマーがあなたが何をしているのかを知っていると仮定します!)解決策は外部jsファイル(またはURLがライブラリを指す)を参照することです。私はWebツールを使用しました:http: //closure-compiler.appspot.com/home

ファウルローイングプリアンブルを適用することで、ファイルを正常にコンパイルできました。

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level QUIET
// @output_file_name default.js
// @formatting pretty_print
// @externs_url http:// ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js
// @externs_url http:// ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.js
// ==/ClosureCompiler==

残っている唯一の問題は、プラグインの名前を単純化できないことをコンパイラに認識させることです。

(function($) { $.fn.extend({ <name>:function(options) { } }); })(jQuery);

これは世界に公開されている名前だからです。何か案は?

于 2010-07-27T17:06:59.557 に答える
4

詳細オプションを使用して jQuery プラグインを適切にコンパイルするには、ソース コードを少し変更する必要があります。すべての外部関数は、ドット構文ではなく引用符付き文字列を使用する必要があります。これにより、クロージャ コンパイラが外部関数名を保持することが保証されます。例えば;

$.fn.pluginName = function(opts) {
  // plugin code
}

にコンパイルされます

$.a.b=function(){};

これはかなり役に立ちません。でも、ソースをちょっと変えると

$.fn['pluginName'] = function(opts) {
  // plugin code
}

これを出力します

$.a.pluginName=function(){};

ずっといい!

于 2010-11-08T14:03:56.820 に答える
1

Closure コンパイラを試してみると、アクセスした関数の名前が変更されました。したがって、(例として)使用すると$.each(// code)、コンパイラはそれを に変更しました$.a(// code )。あなたの問題があると思います。

于 2009-11-09T21:33:06.483 に答える
1

はい、jquery.jsplugin.jsの両方を 1 つのファイルに連結する必要がありますが、現時点では、jQuery の一部はAdvanced Compilationオプションでは正しく圧縮されませんが、Simple Compilationは引き続き使用できます。

jQuery チームは、 Advanced Compilationオプションを使用してコンパイルできるバージョンを間もなくリリースすると確信しています。

高度なコンパイルに興味がある場合は、これらのチュートリアルをチェックしてください。em を読んだら、高度なコンパイルを使用してエラーなしで em をコンパイルできるようになる前に、一部の部分を変更する必要がある理由を理解できます。

于 2009-11-10T03:37:22.647 に答える
0

すべてのスクリプトで機能するには、アプリケーション内にすべてのスクリプトを含める必要があると思います。

于 2009-11-09T22:09:28.347 に答える