遅延モード
デフォルトでは、Flowサーバーはすべてのコードを型チェックします。これにより、「コードのどこかにFlowエラーはありますか?」といった質問に答えることができます。これは、Flowエラーを導入するコード変更を防ぐ継続的インテグレーションフックなどのツールにとって非常に役立ちます。
しかし、Flowユーザーがすべてのコードを気にする必要がない場合があります。`foo.js`というファイルを編集している場合、`foo.js`に関する質問に答えるために必要なリポジトリのサブセットのみをFlowで型チェックしたい場合があります。Flowはより少ない数のファイルのみをチェックするため、より高速になります。これがFlowの遅延モードの背後にある動機です。
ファイルの分類
遅延モードは、コードを4つのカテゴリに分類します。
- 重点ファイル。これらはユーザーが気にするファイルです。
- 依存ファイル。これらは重点ファイルに依存するファイルです。重点ファイルの変更により、依存ファイルで型エラーが発生する可能性があります。
- 依存関係ファイル。これらは、重点ファイルまたは依存ファイルを型チェックするために必要なファイルです。
- 未チェックファイル。その他のすべてのファイル。
遅延モードでは、すべてのJavaScriptファイルは依然として検出され、解析されます。しかし、未チェックファイルは型チェックされません。
重点ファイルの選択
Flowは、Flowの組み込みファイルウォッチャー("dfind")またはWatchmanを使用して、ディスク上のファイルが変更されたときにファイルを重点的に処理します。
そのため、Flowの実行中に変更されるすべてのファイルが重点的に処理されます。しかし、Flowが実行されていないときに変更されるファイルはどうでしょうか?GitまたはMercurialを使用している場合、Flowは「master」(現在のコミットとmasterブランチの共通の祖先)とのマージベース以降に変更されたすべてのファイルを要求します。
「master」を使用していない場合(例:「main」の場合)、これは`file_watcher.mergebase_with`設定で変更できます。クローンから作業している場合は、ローカルにのみ変更されたすべてのファイルを重点的に処理する必要があるため、これを「origin/master」(Gitの場合)に設定することをお勧めします。これは、ローカルの「master」ブランチにコミットした場合でも同様です。
その結果、上流にエラーがない限り、遅延モードではフルチェックと同じエラーが検出されます。「master」にエラーがないことをCIが確認している場合、存在しない可能性のあるエラーについて、変更されていないすべてのファイルをFlowでチェックするのは冗長です。
遅延モードの使用
遅延モードを有効にするには、`.flowconfig`で`lazy_mode=true`を設定します。
手動で遅延モードでFlowを起動するには、以下を実行します。
flow start --lazy-mode true
ファイルを重点的に処理するようにFlowを強制する
CLIから1つ以上のファイルを重点的に処理するようにFlowを強制できます。
flow force-recheck --focus path/to/A.js path/to/B.js