惰性模式
預設情況下,Flow 伺服器會對您的所有程式碼進行類型檢查。這樣它可以回答諸如「我的程式碼中是否有任何 Flow 錯誤」之類的問題。這對於工具很有用,例如持續整合掛鉤,它可以防止引入 Flow 錯誤的程式碼變更。
然而,有時 Flow 使用者可能不在乎所有程式碼。如果他們正在編輯檔案 foo.js,他們可能只希望 Flow 對儲存庫的子集進行類型檢查,以回答有關 foo.js 的問題。由於 Flow 只會檢查較少數量的檔案,因此會更快。這是 Flow 惰性模式背後的動機。
分類檔案
惰性模式將您的程式碼分類為四種類別
- 焦點檔案。這些是使用者關心的檔案。
- 依賴檔案。這些是依賴於焦點檔案的檔案。焦點檔案的變更可能會導致依賴檔案中發生類型錯誤。
- 相依檔案。這些檔案是類型檢查焦點檔案或依賴檔案所必需的檔案。
- 未檢查檔案。所有其他檔案。
惰性模式仍會找到所有 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