跳至主要內容

惰性模式

預設情況下,Flow 伺服器會對您的所有程式碼進行類型檢查。這樣它可以回答諸如「我的程式碼中是否有任何 Flow 錯誤」之類的問題。這對於工具很有用,例如持續整合掛鉤,它可以防止引入 Flow 錯誤的程式碼變更。

然而,有時 Flow 使用者可能不在乎所有程式碼。如果他們正在編輯檔案 foo.js,他們可能只希望 Flow 對儲存庫的子集進行類型檢查,以回答有關 foo.js 的問題。由於 Flow 只會檢查較少數量的檔案,因此會更快。這是 Flow 惰性模式背後的動機。

分類檔案

惰性模式將您的程式碼分類為四種類別

  1. 焦點檔案。這些是使用者關心的檔案。
  2. 依賴檔案。這些是依賴於焦點檔案的檔案。焦點檔案的變更可能會導致依賴檔案中發生類型錯誤。
  3. 相依檔案。這些檔案是類型檢查焦點檔案或依賴檔案所必需的檔案。
  4. 未檢查檔案。所有其他檔案。

惰性模式仍會找到所有 JavaScript 檔案並解析它們。但它不會類型檢查未檢查的檔案。

選擇焦點檔案

當檔案在磁碟上變更時,Flow 會使用 Flow 內建的檔案觀察器 («dfind») 或 Watchman 聚焦檔案。

因此,當 Flow 執行時,所有變更的檔案都會成為焦點。但當 Flow 未執行時變更的檔案呢?如果您使用 Git 或 Mercurial,Flow 會要求它提供自與「master」合併基礎(目前提交和 master 分支的共同祖先)以來已變更的所有檔案。

如果您未使用「master」(例如使用「main」),可以使用 file_watcher.mergebase_with 設定變更此設定。如果您從複製版本工作,您可能想將此設定設為「origin/master」(適用於 Git),這將讓所有已在本地變更的檔案成為焦點,即使您提交到本地的「master」分支也是如此。

最終結果是,只要上游沒有錯誤,Flow 在 lazy 模式中會找到與完整檢查相同的錯誤。例如,如果您的 CI 確保「master」中沒有錯誤,那麼 Flow 檢查所有未變更的檔案中不存在的錯誤就是多餘的。

使用 Lazy 模式

若要啟用 lazy 模式,請在 .flowconfig 中設定 lazy_mode=true

若要手動在 lazy 模式中啟動 Flow,請執行

flow start --lazy-mode true

強制 Flow 將檔案視為焦點

您可以強制 Flow 從 CLI 將一個或多個檔案視為焦點。

flow force-recheck --focus path/to/A.js path/to/B.js