Flow Annotate-Exports
タイプファーストモードへのアップグレードには、モジュール境界でかなりの数の型注釈が必要になる場合があります。大規模なコードベースのアップグレードプロセスを支援するために、不足している注釈を補完することを目的としたコードモッドコマンドを提供しています。このコマンドは、バージョン>= 0.125
のFlowバイナリに含まれています。
注:バージョン0.134以降、タイプファーストがデフォルトモードです。バージョン
>=0.134
を使用している場合は、このコードモッドを実行している間、.flowconfigでtypes_first=false
を設定してください。
このコマンドは、Flowが推論する型を使用して、シグネチャ検証エラーが発生する可能性のある位置を埋めます。それぞれの型が定義モジュールからエクスポートされている限り、必要な型インポートステートメントが含まれます。
一度に複数のファイルで使用することを想定しており、1つのファイルずつではありません。このため、既存のFlowサーバーには接続せず、独自のチェックプロセスを開始します。
このような機械化されたアプローチではよくあることですが、いくつかの注意点があります。
- 必要な型注釈をすべて入力できるわけではありません。手動での作業が必要な場合があります。
- 挿入された注釈が新しいフローエラーを引き起こす可能性があります。これは、推論された型と注釈として記述できる型を常に一致させることができるとは限らないためです。
- ファイルのフォーマットが影響を受ける可能性があります。コードフォーマッタ(例: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.js
でA
をエクスポートします。 b.js
でA
を手動でインポートする必要はありません。コードモッドはこれを自動的に行います。