web-dev-qa-db-ja.com

node_modules / *のフロータイプチェッカーエラー

フロープロジェクトをflow initで初期化しました https://github.com/davezuko/react-redux-starter-kit プロジェクト。

Flowがチェックすると、node_modulesにいくつかのエラーが見つかります。/*フロー* /注釈付きライブラリファイルでエラーが発生しています。

次のようになります。

node_modules/editions/source/index.js:33
 33:    const {name, editions} = require(packagePath)
                                 ^^^^^^^^^^^^^^^^^^^^ The parameter passed to require() must be a literal string.

node_modules/fbjs/lib/Deferred.js.flow:60
 60:     Promise.prototype.done.apply(this._promise, arguments);
                           ^^^^ property `done`. Property not found in
474: declare class Promise<+R> {
     ^ Promise. See lib: /private/tmp/flow/flowlib_d34ebcf/core.js:474

node_modules/fbjs/lib/shallowEqual.js.flow:29
 29:     return x !== 0 || 1 / (x: $FlowIssue) === 1 / (y: $FlowIssue);
                               ^^^^^^^^^^ identifier `$FlowIssue`.     Could not resolve name

これらのファイルを無視してフローを作成する必要がありますか?型チェックの正しさに影響を与える可能性があります。

14
Igor Loskutov

Fbjsとエディションの両方がFlowを使用して記述されています。それぞれに、さまざまな構成の_.flowconfig_ファイルがあります。表示されているすべてのエラーは、_.flowconfig_の設定がわずかに異なるために発生します。

最も簡単な修正は、エディションとfbjsが使用しているものをサポートするように_.flowconfig_を変更することです。

  1. _module.ignore_non_literal_requires=true_セクションに_[options]_を追加すると、最初のエラーが修正されます。フローは依存関係グラフを理解する必要があるため、デフォルトでは、変数をrequire()に渡すとエラーが発生します。このオプションは、この要件を緩和します。
  2. _./node_modules/fbjs/flow/lib_セクションに_[libs]_を追加すると、2番目のエラーが修正されます。 fbjsはPromiseの非標準バージョンを使用しますが、そのバージョンのPromiseのライブラリ定義が同梱されています。
  3. _suppress_type=$FlowIssue_セクションに_[options]_を追加すると、3番目のエラーが修正されます。このオプションは、anyタイプを_$FlowIssue_にエイリアスするだけです。エラーを抑制するためにanyを使用している場合、より明確になります。

将来的に、Flowチームは、Flowユーザーが_node_modules/_を完全に無視し、代わりに https://github.com/flowtype/flow-typed/ からのライブラリ定義に依存することを選択することを想像しますそのため、フロータイプの定義とツールに投資しています。これにより、発生しているような状況を回避できます。

29
Gabe Levi

私は個人的にこれを行うことでnode_modulesの下のすべてを無視したいです。

[ignore]
.*/node_modules/.*

次に、flow-typedを使用してすべてのインポートをインストールまたはスタブします https://github.com/flowtype/flow-typed

4
Dale Jefferson