5

2000行以上のJavaScriptを圧縮したいので、http://dean.edwards.name/packer/http://closure-compiler.appspot.com/homeの両方をテストしました。

しかし、どちらの場合も、圧縮されたスクリプトでエラーが発生します。エラーの例はですjQuery(document).Da is not a function

最適化後にスクリプトが機能しないのはなぜですか?そして、スクリプトを最適化/圧縮するために何ができますか?

4

3 に答える 3

6

すべてのJavaScriptファイルの先頭にセミコロンがあることを確認してください。奇妙なことですが、その理由は次のとおりです。

1つのファイルに次のようなものが含まれている可能性があります。

function someFunc() {
   ...
}

次のファイルで次のようなものが続きます(これはjQueryプラグインの数です):

(function($) {
   ...
})(jQuery);

それはこれに圧縮されます:

function someFunc(){ }( function($){...} )(jQuery);

これは本質的に、引数someFuncとしてと呼ばれます。function($){...}次に、返されたものをすべて受け取り、それが関数であると想定しjQueryて、引数として呼び出します。

これが、ほとんどのjQueryプラグインがで始まる理由;(function($){です。

すべてのファイルの先頭(または末尾、ただし一貫性を保つ)にセミコロンを付けると、スクリプトは次のようになります。

;function someFunc(){ }; (function($){...})(jQuery);

そうすれば、スクリプトは意図したとおりに解釈されます。

于 2009-11-17T03:04:41.627 に答える
3

オンラインのYUICompressorを試すことができます。これはグーグルでの最初の結果です:http://www.refresh-sf.com/yui/

于 2009-11-17T02:54:14.397 に答える
0

私も同じ問題を抱えていました。いくつかのjquery-pluginsを含むjavascript-filesを縮小したいときはいつでも、エラーが発生しました。最初に、ニコライデスが彼の最後の投稿で説明したように、追加のセミコロンの問題を解決しようとしました。彼のアドバイスがあっても、エラーなしでjsファイルを縮小することはできませんでした。その後、私はすべてのjquery-pluginで次の行を変更し、私のために働きました。例えば:

(function($) {
$.fn.defaultInputs = function(settings) { ...

私は単純化して

jQuery.fn.defaultInputs = function(settings) { ...
于 2010-09-15T20:02:20.287 に答える