0

是否有任何流行的 JavaScript 混淆器能够内联常量和重命名对象的公共属性/方法?

IE。

var CONST1 = 5;
var CONST2 = 10;

function Test() {
    abc = 123;
    this.xyz = 234;
}

Test.prototype = {
    do_it: function(argX, argY) {
        return (argX + abc) / CONST1 + (argY + this.xyz) / CONST2;
    }
};

document.getElementById("button").onclick = function() {
    x = document.getElementById("x").value;
    y = document.getElementById("y").value;
    alert("Done it: " + new Test().do_it(x, y));
}
  • 我希望 CONST1 和 CONST2 有效地消失并内联它们的值。

  • 我想替换/修改所有名称(abc、xyz、Test、do_it、argX、argY)。

  • 我希望混淆器假设没有任何外部依赖于我的源代码中的任何对象/方法/常量名称。

Google Closure 或任何其他混淆器可以做到这一点吗?

4

2 回答 2

2

Google Closure 可以做到以上所有。他们在http://closure-compiler.appspot.com/home上提供了一个基于 Web 的 UI,供您使用自己的代码进行测试。

于 2013-11-01T22:52:22.407 回答
1

是的,Closure Compiler 可以在高级编译模式下这样做,但是需要注释来防止自动删除prototype属性。例如,这个:

var CONST1 = 5;
var CONST2 = 10;

function Test() {
    abc = 123;
    this.xyz = 234;
}

Test.prototype = {
    do_it: function(argX, argY) {
        return (argX + abc) / CONST1 + (argY + this.xyz) / CONST2;
    }
};

被注释为:

var CONST1 = 5;
var CONST2 = 10;

/** @constructor */
function Test() {

abc = 123;
this.xyz = 234;
}

/** @expose */
Test.prototype = {
do_it: function(argX, argY) {
return (argX + abc) / CONST1 + (argY + this.xyz) / CONST2;
}
};

window["Test"] = Test;

然后当它运行时,转换为:

function a() {
  abc = 123;
  this.a = 234;
}
a.prototype = {b:function(b, c) {
  return(b + abc) / 5 + (c + this.a) / 10;
}};
window.Test = a;
于 2013-11-01T22:54:04.757 回答