忽略Google Closure中一个文件的编译器警告

时间:2011-03-25 15:06:41

标签: javascript google-closure-compiler google-closure google-closure-library

我在一个相当大的Closure项目中使用外部库(Phonegap)。不幸的是,Phonegap生成了一个吨编译器警告(所有“危险使用此”)。足够它使搜索编译器输出警告我自己的代码非常烦人。

有没有办法让一个文件中的警告静音?

2 个答案:

答案 0 :(得分:8)

我认为您的意思是在使用VERBOSE或checkTypes时键入警告。

将以下内容放入任何文件中:

/**
 * @fileoverview
 * @suppress {checkTypes}
 */

仅为该文件关闭的类型检查。你也可以@suppress许多其他事情。阅读Closure Compiler文档以获取更多详细信息。

危险使用“this”

但是,如果您正在谈论“危险使用此”警告,请勿忽略它们。它们指的是:

  1. 您有一个名称空间
  2. 您在该命名空间中定义了一个函数
  3. 您在该函数中使用“this” - 这可以引用命名空间
  4. 编译器
  5. 可能展平该命名空间

    例如:

    foo.bar.hello = "Hello World!";
    foo.bar.baz = function() {
       alert(this.hello);
    };
    foo.bar.baz();    // this --> foo.bar
    

    “警报”声明将由编译器警告“危险使用此”进行标记。为什么?请记住,如果编译器展平“foo.bar”命名空间:

    $foo$bar$hello$ = "Hello World!";
    $foo$bar$baz$ = function() { alert(this.$hello$); }
    $foo$bar$baz$();   // this --> window
    

    注意我在这里使用调试变量重命名。实际上,“$ foo $ bar $ baz”可能只是重命名为“a”。

    您可以立即看到对foo.bar.baz()的调用将失败,因为“this”不再引用“foo.bar”,而是引用全局对象。您的代码会因响亮的 CRANK而崩溃!

    “此”可以的例外情况

    现在,有些情况下使用“this”即可。例如,在事件处理程序中。 “this”将自动指向引发该事件的DOM节点。

    在这些情况下,您需要使用以下类型的JsDoc指令:

    /** @this {Node} */
    

    指定“this”的预期类型,以便关闭编译器。

答案 1 :(得分:2)

应该有一个可以与ClosureCompiler.jar一起使用的--warning_level选项

VERBOSE,QUIET,DEFAULT是选项。

您应该使用QUIET单独编译PhoneGap。