我正在Google封闭编译器的帮助下撰写Google Chrome扩展程序。 我大量使用消息API来在不同进程上运行的代码之间进行通信。这就是为什么我的文件需要单独编译。如果我使用高级优化,我还必须使用此消息API发送的数据中使用带引号的字符串访问属性。这没有问题,但它使我的代码看起来很丑。但我喜欢高级优化带来的死代码删除。
我希望能够在没有高级优化附带的重命名的情况下执行死代码删除。闭包编译器可以实现吗?
答案 0 :(得分:1)
它是not possible out of the box,但您可以下载源代码并自己使用Java进行自定义。
答案 1 :(得分:1)
是的,我同意。在所有处理传递数据的代码中使用obj["prop"]
而不是obj.prop
是非常丑陋的,只是为了在高级模式下使用Closure Compiler。
我开发的一个技巧是构建一个映射对象:
var mapping = {
field1: "field1",
field2: "field2"
:
};
这个对象在由Closure Compiler编译之后,会将字段名称修改(重命名)映射到原始的,未编码的名称,例如:
var a = {
b: "field1",
c: "field2"
:
};
然后在发送数据之前,我将其传递给克隆整个数据结构的函数,在将 new 对象传递出去之前,将每个受损的字段名称转换为新对象中的未编码版本:
function cloneData(obj) {
var newobj = {};
foreach (var name in obj) {
if (!obj.hasOwnProperty(name)) continue;
var fullname = mapping[name] || name;
newobj[fullname] = obj[name];
}
return newobj;
}
对于收到的数据,请执行相反的操作。
答案 2 :(得分:0)
在不知道要保留多少内容的情况下,您可以查看文档的"Export Symbols You Want To Keep"部分。