首页 > 解决方案 > 闭包编译器 use_types_for_optimization 什么都不做

问题描述

设置use_types_for_optimization为 true 对我的这段代码几乎没有影响。输出文件相同或大小相同,但在一些地方具有不同的属性名称。无论我做什么,所有属性名称在所有对象中都是唯一的。

我有两个这样的例子,但是要编写很多代码。一个例子是 ES6 class,另一个是全局对象。我用过@typedef@type。我试过使用@interfaceand @record。没有任何区别。

以下是我尝试的基本语法的一些示例:

class myClass {
  constructor () {
    /** type {boolean} */
    this.prop = true;
  }
}

/** @typedef {{prop:(boolean)}} */
let myObj = {prop:true};

我必须做什么才能让 Closure Compiler 使类型中的属性仅在该类型中唯一?看起来应该很简单,但我还没有弄清楚。

标签: javascriptgoogle-closure-compiler

解决方案


如果属性被重命名,那么use_types_for_optimization就是在做它打算做的事情。没有它,任何与外部文件中的属性同名的属性都不能重命名。

如果已知不同对象上的两个属性彼此没有关系,编译器将尝试将它们重命名为相同的名称。这会导致更小的 gzip 输出。

如果您尝试重命名属性但确保每种类型都有唯一的属性名称,则需要对编译器进行自定义构建。特别是,您需要禁用“AmbiguateProperties”通道。


推荐阅读