在Google closure编译器的帮助下,我正在编写一个Google Chrome扩展。我大量使用消息API在运行在不同进程上的代码之间进行通信。这就是为什么我的文件需要单独编译。如果我使用高级优化,我还必须访问使用此消息API发送的数据中带引号的字符串的属性。这是没有问题的,但它让我的代码看起来很丑陋。但我喜欢高级优化带来的死代码删除。
我希望能够在不使用高级优化带来的重命名的情况下删除死代码。使用闭包编译器可以做到这一点吗?
发布于 2010-12-22 20:19:10
它是not possible out of the box,但是您可以下载源代码并使用Java语言进行自定义。
发布于 2011-03-10 20:56:59
是的,我同意。仅仅为了在高级模式下使用闭包编译器,就不得不在处理传递数据的所有代码中使用obj["prop"]而不是obj.prop,这是很丑陋的。
我开发的一个技巧是构建一个映射对象:
var mapping = {
field1: "field1",
field2: "field2"
:
};这个对象在被闭包编译器编译后,字段名称将被损坏(重命名),映射到原始的、未损坏的名称,例如:
var a = {
b: "field1",
c: "field2"
:
};然后,在我发送数据之前,我通过一个克隆整个数据结构的函数传递数据,在传递新对象之前,将每个损坏的字段名转换为新对象中未损坏的版本:
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;
}对于接收到的数据,执行相反的操作。
发布于 2010-12-22 18:56:47
在不知道要保留多少个的情况下,您可以查看文档的"Export Symbols You Want To Keep"部分。
https://stackoverflow.com/questions/4402622
复制相似问题