uglifyjs2全局混淆


    從git克隆uglifyjs2源碼后,進入目錄:

    npm link

    編譯並安裝uglifyjs2成功,就可以直接調用uglifyjs命令了。但是在進行全局混淆時出現了問題,雖然指定了文件topvar.json為全局變量的cache文件,還是出現:

    1)全局變量混淆后的名字與局部變量的混淆名沖突;

    2)不同全局變量的混淆名沖突。

    查閱文檔並做了一些測試,無奈都未成功。最終翻閱代碼並做如下改動:

    1)在scope.js文件中修改SymbolDef.prototype.mangle函數:

1             // 為了避免混淆時TopLevel中的變量名與局部作用域中的變量名沖突, 對於Toplevel的變量增加前后綴雙下划線
2             if (this.scope instanceof AST_Toplevel) { 3                 console.log(this.name + "=>" + this.mangled_name); 4                 this.mangled_name = "__" + this.mangled_name + "__"; 5             }

對於全局變量的混淆,添加雙下划線前后綴,避免沖突。在這修改之后,在計算next_mangled_name時需要過濾掉已經使用過的全局符號。

    2)在函數next_mangled_name函數中增加如下處理:

 

1     while (true) { 2         name = base54(++scope.cname); 3         // 雙下划線過濾
4         if (in_use['__' + name + '__'] || !is_identifier(name) || member(name, options.reserved)) continue; 5         if (!names[name]) break; 6  holes.push(scope.cname); 7     }

如此這般之后,全局變量混淆的問題才算是徹底解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM