2000行以上のJavaScriptを圧縮したいので、http://dean.edwards.name/packer/とhttp://closure-compiler.appspot.com/homeの両方をテストしました。
しかし、どちらの場合も、圧縮されたスクリプトでエラーが発生します。エラーの例はですjQuery(document).Da is not a function
。
最適化後にスクリプトが機能しないのはなぜですか?そして、スクリプトを最適化/圧縮するために何ができますか?
2000行以上のJavaScriptを圧縮したいので、http://dean.edwards.name/packer/とhttp://closure-compiler.appspot.com/homeの両方をテストしました。
しかし、どちらの場合も、圧縮されたスクリプトでエラーが発生します。エラーの例はですjQuery(document).Da is not a function
。
最適化後にスクリプトが機能しないのはなぜですか?そして、スクリプトを最適化/圧縮するために何ができますか?
すべてのJavaScriptファイルの先頭にセミコロンがあることを確認してください。奇妙なことですが、その理由は次のとおりです。
1つのファイルに次のようなものが含まれている可能性があります。
function someFunc() {
...
}
次のファイルで次のようなものが続きます(これはjQueryプラグインの数です):
(function($) {
...
})(jQuery);
それはこれに圧縮されます:
function someFunc(){ }( function($){...} )(jQuery);
これは本質的に、引数someFunc
としてと呼ばれます。function($){...}
次に、返されたものをすべて受け取り、それが関数であると想定しjQuery
て、引数として呼び出します。
これが、ほとんどのjQueryプラグインがで始まる理由;(function($){
です。
すべてのファイルの先頭(または末尾、ただし一貫性を保つ)にセミコロンを付けると、スクリプトは次のようになります。
;function someFunc(){ }; (function($){...})(jQuery);
そうすれば、スクリプトは意図したとおりに解釈されます。
オンラインのYUICompressorを試すことができます。これはグーグルでの最初の結果です:http://www.refresh-sf.com/yui/
私も同じ問題を抱えていました。いくつかのjquery-pluginsを含むjavascript-filesを縮小したいときはいつでも、エラーが発生しました。最初に、ニコライデスが彼の最後の投稿で説明したように、追加のセミコロンの問題を解決しようとしました。彼のアドバイスがあっても、エラーなしでjsファイルを縮小することはできませんでした。その後、私はすべてのjquery-pluginで次の行を変更し、私のために働きました。例えば:
(function($) {
$.fn.defaultInputs = function(settings) { ...
私は単純化して
jQuery.fn.defaultInputs = function(settings) { ...