Flow Annotate-Exports
升級到 Types-First 模式可能需要在模組邊界加入大量的類型註解。為了協助升級大型程式碼庫,我們提供了一個 codemod 指令,其目標是填入這些遺失的註解。此指令包含在 Flow 二進位檔中,版本為 >= 0.125
。
注意:從版本 0.134 開始,types-first 為預設模式。如果您使用的是版本
>=0.134
,請務必在執行此 codemod 時於 .flowconfig 中設定types_first=false
。
此指令使用 Flow 推論的類型,填入否則會引發簽章驗證失敗的位置。它會包含必要的類型匯入陳述式,只要各自的類型從其定義的模組中匯出即可。
它設計為一次用於多個檔案,而不是一次用於一個檔案。因此,它不會連線到現有的 Flow 伺服器,而是啟動自己的檢查程序。
與此類機械化方法常見的情況一樣,它有一些注意事項
- 它無法填入每個所需的類型註解。有些情況需要手動處理。
- 插入的註解可能會造成新的流程錯誤,因為無法總是將推論的類型與可以寫成註解的類型相符。
- 檔案格式可能會受到影響。如果使用了程式碼格式化器(例如 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 會自動執行此動作。