我正在 Google 闭包编译器的帮助下编写 Google Chrome 扩展。我大量使用消息 API 在不同进程上运行的代码之间进行通信。这就是为什么我的文件需要单独编译的原因。如果我使用高级优化,我还必须在使用此消息 API 发送的数据中使用带引号的字符串访问属性。这没有问题,但它让我的代码看起来很难看。但我喜欢高级优化带来的死代码删除。
我希望能够在没有高级优化带来的重命名的情况下删除死代码。闭包编译器可以做到这一点吗?
我正在 Google 闭包编译器的帮助下编写 Google Chrome 扩展。我大量使用消息 API 在不同进程上运行的代码之间进行通信。这就是为什么我的文件需要单独编译的原因。如果我使用高级优化,我还必须在使用此消息 API 发送的数据中使用带引号的字符串访问属性。这没有问题,但它让我的代码看起来很难看。但我喜欢高级优化带来的死代码删除。
我希望能够在没有高级优化带来的重命名的情况下删除死代码。闭包编译器可以做到这一点吗?
开箱即用是不可能的,但是您可以下载源代码并使用 Java 自己进行自定义。
是的我同意。为了在高级模式下使用闭包编译器,不得不在所有处理传递数据的代码中obj["prop"]
使用它是很难看的。obj.prop
我开发的一个技巧是构建一个映射对象:
var mapping = {
field1: "field1",
field2: "field2"
:
};
这个对象,在被 Closure Compiler 编译后,将有字段名称被修改(重命名)映射到原始的、未修改的名称,例如:
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;
}
对于接收到的数据,执行相反的操作。
在不知道要保留多少的情况下,您可能会查看文档的“导出要保留的符号”部分。