gpt4 book ai didi

javascript - Closure Compiler - 混淆公共(public)方法 - 不一致的行为?

转载 作者:行者123 更新时间:2023-11-29 19:30:16 24 4
gpt4 key购买 nike

我刚开始使用 Closure Compiler,我看到一些关于混淆公共(public)对象方法的不一致行为。

我正在使用 grunt-closure-compiler - 这是我的 grunt 配置:

module.exports = function(grunt) {

grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),

'closure-compiler': {
app: {
closurePath: 'closure-compiler',
js: 'src/app.js',
jsOutputFile: 'js/app.min.js',
maxBuffer: 500,
options: {
compilation_level: 'ADVANCED_OPTIMIZATIONS',
language_in: 'ECMASCRIPT5_STRICT',
formatting: 'PRETTY_PRINT'
}
}
}
});


grunt.loadNpmTasks('grunt-closure-compiler');

};

这是我要混淆的 app.js 文件:

(function() {
/**
* @constructor
*/
function MyClass() {
var map = {};
this.put = function(name, val) {
map[name] = val;
};
this.get = function(name) {
return map[name];
};
}
var mapper = new MyClass();
mapper.put("first", 123);
alert(mapper.get("first"));

})();

(function() {
/**
* @constructor
*/
function Foo() {
var private_member_1 = 'bla';

this.someMethod = function(param1, param2) {
// do some stuff
console.log('abc');
return private_member_1;
};
// etc...
}

var foo = new Foo();
var value = foo.someMethod();
console.log(value + value);
})();

这是运行 grunt closure-compiler:app 后的输出

'use strict';(function() {
var a = new function() {
var a = {};
this.put = function(b, c) {
a[b] = c;
};
this.get = function(b) {
return a[b];
};
};
a.put("first", 123);
alert(a.get("first"));
})();
(function() {
var a = (new function() {
this.a = function() {
console.log("abc");
return "bla";
};
}).a();
console.log(a + a);
})();

请注意,在第一个闭包中,方法 putget 没有被混淆,而在第二个闭包中,方法 someMethod 混淆了。

为什么会这样?我怎样才能使我所有类中的所有公共(public)方法(如 putget)也被混淆?

请注意-

  • 我愿意使用 Closure Compiler 以外的其他工具来实现这一目标。
  • 我想将它与 TypeScript 一起使用,即混淆编译后的 TypeScript 代码,这就是为什么我有很多公共(public)方法。
  • 某些特定方法是不应混淆的 API 方法。所以我需要一种方法来告诉混淆器要跳过哪些方法。

最佳答案

更新

自 20150315 版 Closure-compiler 起,默认启用基于类型的优化。


这实际上在项目FAQ中涵盖了.

您需要的选项是 use_types_for_optimization。即使在不相关的对象上定义了同名属性,这也将启用属性重命名。

只能使用此标志重命名的综合属性列表非常庞大:在外部文件中的任何对象上定义的任何属性名称。

关于javascript - Closure Compiler - 混淆公共(public)方法 - 不一致的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com