跳至主要內容

Flow Annotate-Exports

升級到 Types-First 模式可能需要在模組邊界加入大量的類型註解。為了協助升級大型程式碼庫,我們提供了一個 codemod 指令,其目標是填入這些遺失的註解。此指令包含在 Flow 二進位檔中,版本為 >= 0.125

注意:從版本 0.134 開始,types-first 為預設模式。如果您使用的是版本 >=0.134,請務必在執行此 codemod 時於 .flowconfig 中設定 types_first=false

此指令使用 Flow 推論的類型,填入否則會引發簽章驗證失敗的位置。它會包含必要的類型匯入陳述式,只要各自的類型從其定義的模組中匯出即可。

它設計為一次用於多個檔案,而不是一次用於一個檔案。因此,它不會連線到現有的 Flow 伺服器,而是啟動自己的檢查程序。

與此類機械化方法常見的情況一樣,它有一些注意事項

  1. 它無法填入每個所需的類型註解。有些情況需要手動處理。
  2. 插入的註解可能會造成新的流程錯誤,因為無法總是將推論的類型與可以寫成註解的類型相符。
  3. 檔案格式可能會受到影響。如果使用了程式碼格式化器(例如 prettier),建議在 codemod 執行完畢後執行它。

如何套用 codemod

呼叫此指令的常見方式為

flow codemod annotate-exports \
--write \
--repeat \
--log-level info \
/path/to/folder \
2> out.log

此指令會轉換 /path/to/folder 底下的檔案。這不一定是根目錄(包含 .flowconfig 的目錄)。

它使用下列旗標

  • --write 會更新 /path/to/folder 底下需要註解的檔案。沒有此旗標,產生的檔案會列印在指令列上。

  • --repeat 確保轉換會套用,直到沒有更多檔案變更為止。此模式在此處是必要的,因為 codemod 新增的每個新類型都可能需要新的位置進行註解。

  • --log-level info 在標準錯誤串流中輸出有用的除錯資訊。此選項可能會導致詳細的輸出,因此我們將錯誤輸出重新導向到記錄檔 out.log

提供輸入的另一種便利方式是傳遞旗標

--input-file file.txt

其中 file.txt 包含要轉換的特定檔案清單。

Codemod 輸出

在 codemod 的每次反覆運算後,都會在 CLI 上列印摘要。此摘要包括已新增註解數量的統計資訊,以及跳過多少個位置。它也會列印所遇到的各種錯誤的數量。這些可以與記錄檔中列印的錯誤相符。

常見的錯誤情況是,在檔案 a.js 中定義但未輸出的類型 A,在檔案 b.js 中推論出來。codemod 會跳過新增此註解,並在記錄檔中報告錯誤。要修正此情況,您可以在 a.js 中輸出 A。請注意,不需要在 b.js 中手動匯入 A。codemod 會自動執行此動作。