6

かなり大きな Closure プロジェクトで外部ライブラリ (Phonegap) を使用しています。残念ながら、Phonegap は大量のコンパイラ警告を生成します (すべて「これの危険な使用」)。コンパイラの出力を検索して、自分のコードに関する警告を探すのはかなり面倒です。

1 つのファイルからの警告だけを黙らせる方法はありますか?

4

2 に答える 2

8

VERBOSE または checkTypes を使用している場合は、型の警告を意味していると思います。

以下を任意のファイルに入れます。

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

そのファイルのみの型チェックをオフにします。@suppress他にも多くのことができます。詳細については、Closure Compiler のドキュメントを参照してください。

「これ」の危険な使い方

ただし、「これを危険に使用する」という警告について話している場合は、無視しないでくださいそれらは次の場所を指します。

  1. 名前空間があります
  2. その名前空間内で関数を定義しました
  3. その関数内で「this」を使用すると、これは名前空間を参照できます
  4. その名前空間は、コンパイラによってフラット化される可能性があります

例えば:

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

"alert" ステートメントは、"dangerous use of this" というコンパイラ警告によってフラグが立てられます。なんで?コンパイラが "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 と共にクラッシュします!

「これ」でOKな例外ケース

さて、「これ」の使い方でOKな場合もあります。たとえば、イベント ハンドラーで。「this」は、そのイベントを発生させた DOM ノードを自動的に指します。

このような場合、次のタイプの JsDoc ディレクティブを使用する必要があります。

/** @this {Node} */

コンパイラをシャットダウンするために、「this」に期待される型を指定します。

于 2011-03-26T03:50:30.560 に答える
2

ClosureCompiler.jar で使用できる --warning_level オプションが必要です。

VERBOSE、QUIET、DEFAULT はオプションです。

PhoneGap は QUIET とは別にコンパイルする必要があります。

于 2011-03-25T15:45:33.593 に答える