3

次の形式のコードがあります。

function myfunc1 () { ... jquery.bind('click', myfunc2) ... }
function myfunc2 () { ... }
...

はい、関数はグローバルですが、グーグルクローム拡張コンテンツスクリプト内で書いているので問題ないので、サンドボックス化されています。

今、私はコードを縮小して難読化しようとしています。YUICompressorとGoogleClosureコンパイラを試しました。問題は、グローバル関数名を縮小/難読化する方法がわからないことです。YUIを使用すると、外部から呼び出された場合にグローバル変数を縮小しません。クロージャを詳細モードにすると、グローバル変数の名前を変更できるように見えますが、デッドコードの削除に問題があります。ほとんどの関数は、DOMの相互作用とイベント処理に依存し、直接呼び出されないため、機能していないように見えます。

では、これらのグローバル変数を最小化する方法について何かアイデアはありますか?正規表現の置換を行うためにスクリプトを作成する必要がありますか?また、ミニファイパターンにより適している場合は、コードをリファクタリングすることもできます(たとえば、クロージャーに追加するなど)。

4

4 に答える 4

11

多くのスクリプトでは、パブリックAPIの可用性と予測可能性が損なわれるため、ミニファイアはパブリック/グローバル名を変更しません。

パブリックAPIを維持する必要がないため、クロージャ関数でラップして「プライベート」にするだけで十分な場合があります。

(function () {

    function myfunc1 () { ... jquery.bind('click', myfunc2) ... }
    function myfunc2 () { ... 
    ...

})();

しかし、それでも、それはミニファイアの作者の裁量に非常に委ねられているので、保証はありません。

于 2011-04-18T04:49:59.260 に答える
1

ClosureCompilerのオンラインドキュメントを参照してください。

言い換えると:

  1. 保持したい機能を「エクスポート」する
  2. 名前を変更したくない関数を含む「externs」ファイルを作成します
  3. 詳細モードでClosureCompilerを実行する
于 2011-04-18T06:30:42.953 に答える
1

Semantic DesignsJavaScriptObfuscatorを参照してください。どのシンボルが難読化され、どのシンボルが難読化されていないかを完全に制御できるため、このような状況を管理できます。作業コードを変更する必要はありません。

私は彼らのために働いています。

于 2011-04-18T05:43:29.410 に答える
0

コードで一般的に使用されるjQuery関数へのローカル参照を作成できますが、これは縮小されますか?

例えば:

$(function() {
   var jQueryAnimate = $.animate,
       jQueryAddClass = $.addClass;

   $('.foo').jQueryAddClass('.bar');
});
于 2013-01-10T17:22:07.360 に答える