メインコンテンツにスキップ

Flow Annotate-Exports

タイプファーストモードへのアップグレードには、モジュール境界でかなりの数の型注釈が必要になる場合があります。大規模なコードベースのアップグレードプロセスを支援するために、不足している注釈を補完することを目的としたコードモッドコマンドを提供しています。このコマンドは、バージョン>= 0.125のFlowバイナリに含まれています。

注:バージョン0.134以降、タイプファーストがデフォルトモードです。バージョン>=0.134を使用している場合は、このコードモッドを実行している間、.flowconfigでtypes_first=falseを設定してください。

このコマンドは、Flowが推論する型を使用して、シグネチャ検証エラーが発生する可能性のある位置を埋めます。それぞれの型が定義モジュールからエクスポートされている限り、必要な型インポートステートメントが含まれます。

一度に複数のファイルで使用することを想定しており、1つのファイルずつではありません。このため、既存のFlowサーバーには接続せず、独自のチェックプロセスを開始します。

このような機械化されたアプローチではよくあることですが、いくつかの注意点があります。

  1. 必要な型注釈をすべて入力できるわけではありません。手動での作業が必要な場合があります。
  2. 挿入された注釈が新しいフローエラーを引き起こす可能性があります。これは、推論された型と注釈として記述できる型を常に一致させることができるとは限らないためです。
  3. ファイルのフォーマットが影響を受ける可能性があります。コードフォーマッタ(例:prettier)を使用する場合は、コードモッドの実行後に実行することをお勧めします。

コードモッドの適用方法

このコマンドを呼び出す一般的な方法は次のとおりです。

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

このコマンドは、/path/to/folderの下にあるファイルを変換します。これはルートディレクトリ(.flowconfigを含むディレクトリ)である必要はありません。

次のフラグを使用します。

  • --writeは、/path/to/folderの下にある注釈が必要なファイルをインプレースで更新します。このフラグがない場合、結果のファイルはコマンドラインに出力されます。

  • --repeatは、ファイルが変更されなくなるまで変換が適用されるようにします。コードモッドが追加する新しい型ごとに、注釈を付ける新しい場所が必要になる場合があるため、このモードが必要です。

  • --log-level infoは、標準エラーストリームに役立つデバッグ情報を出力します。このオプションは冗長な出力につながる可能性があるため、エラー出力をログファイルout.logにリダイレクトしています。

入力を提供するもう1つの便利な方法は、フラグを渡すことです。

--input-file file.txt

ここで、file.txtには変換されるファイルの特定のリストが含まれています。

コードモッドの出力

コードモッドの反復ごとに、CLIにサマリーが出力されます。このサマリーには、追加された注釈の数とスキップされた場所の数に関する統計情報が含まれています。また、発生したさまざまな種類のエラーのカウントも出力します。これらは、ログに出力されたエラーと一致させることができます。

一般的なエラーケースは、ファイルa.jsで定義されているがエクスポートされていない型Aがファイルb.jsで推論される場合です。コードモッドはこの注釈の追加をスキップし、ログにエラーを報告します。このケースを修正するには、a.jsAをエクスポートします。 b.jsAを手動でインポートする必要はありません。コードモッドはこれを自動的に行います。