【问题标题】:Why does Google Closure Compiler NOT rename these external variables?为什么 Google Closure Compiler 不重命名这些外部变量?
【发布时间】:2013-02-04 02:56:13
【问题描述】:

根据文档 (https://developers.google.com/closure/compiler/docs/api-tutorial3#externs),似乎闭包编译器应该在不存在外部声明时重命名变量,包括使用来自外部代码位的函数/变量时。他们给出的例子是

function makeNoteDom(noteTitle, noteContent, noteContainer) {
  // Create DOM structure to represent the note.
  var headerElement = textDiv(noteTitle);
  var contentElement = textDiv(noteContent);
...
}

其中 textDiv 函数由某种第三方库在全局范围内声明。它说 textDiv 应该声明为外部以防止重命名。

我的问题是 - 当我将此代码或类似代码放入 Closure Compiler 而没有任何外部声明时,为什么 textDiv 没有重命名(这会破坏代码),如文档所示?

【问题讨论】:

    标签: minify google-closure-compiler


    【解决方案1】:

    编译器假定对未定义函数的调用实际上是对外部函数的调用。使用命令行编译器,您可以使用--warning_level VERBOSE 让编译器将此情况视为错误。

    Web Application 主要是为演示而构建的,默认情况下假定它是这样的。虽然您可以设置VERBOSE 警告级别,但它不会更改此功能。有关选项的信息,请参阅Additional Web Service Options 页面。我已经为此提交了bug report

    由于属性的重命名算法,如果未在 externs 中的对象上声明相同的属性名称,则未声明的属性将以破坏方式重命名。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多