2016-07-06 18 views
9

プロジェクトでflow initというフロープロジェクトを初期化しました。node_modulesのフロータイプチェッカーエラー/ *

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

それは次のようになります。

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 

は、私は、流れがそれらのファイルを無視して作るべきか?私はそれがタイプチェックの正確さに影響するかもしれないと仮定します。

答えて

25

フローを使用してfbjとエディションの両方が書き込まれます。彼らはそれぞれ様々な構成のファイルを.flowconfig持っています。表示されているすべてのエラーは、.flowconfigの設定が多少異なるためです。

最も簡単な修正は、.flowconfigを修正して、エディションとfbjが使用していることをサポートすることです。

  1. module.ignore_non_literal_requires=true[options]セクションに追加すると、最初のエラーが修正されます。デフォルトでは、フローにはrequire()に変数を渡すとFlowがエラーになります。なぜなら、Flowは依存関係グラフを理解したいからです。このオプションは、この要件を緩和します。
  2. [libs]セクションに./node_modules/fbjs/flow/libを追加すると、2番目のエラーが修正されます。 fbjsはPromiseという非標準バージョンを使用しますが、そのバージョンのライブラリ定義はPromiseです。
  3. suppress_type=$FlowIssue[options]セクションに追加すると、3番目のエラーが修正されます。このオプションは、にanyのエイリアスを追加するだけです。 anyを使用してエラーを抑制しているときは、より明確になります。将来的には

、フローチームは、フローユーザーがhttps://github.com/flowtype/flow-typed/からライブラリ定義に依存して完全にし、代わりにnode_modules/を無視することを選択しますので、我々は定義とフロー型指定された周りのツールに投資していることを想像します。これにより、実行中の状況が回避されます。

6

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

[ignore] 
.*/node_modules/.* 

私はその後、私はこれをやっに対してお勧めするすべての輸入 https://github.com/flowtype/flow-typed

+3

をインストールしたり、スタブする流れ型付けを使用しています。 NPMパッケージがファーストクラスのフローサポートを持っている場合、フローはそのタイプ入力を無視します。 – Kriegslustig