2017-01-11 18 views
0

私は3つのES2015モジュールを持っています:store.jsmiddleware-config.js、自動生成middleware-config-settings.jsとロジックとインポートがあります。"モジュールが見つかりません"自動生成されたファイルのフローエラー

モジュールmiddleware-config-settings.jsは、アプリがnpm startで始まる場合、webpack.config.jsから生成されます。

store.js

// @flow 
... 
import middlewareConfigs from './middleware/middleware-config'; 
... 

middleware-config.js

// @flow 
... 
import defaultSettings from './middleware-config-settings'; 
... 

モジュールmiddleware-config-settings.jsは、単純なJSONです:私はflowでプロジェクトを確認

// @flow 
export default { 
    profilingMiddlewareConfig: { 
    isActive: true, 
    }, 
    reduxDiffStateMiddlewareConfig: { 
    isActive: true, 
    params: { 
     ignoredActionTypes: [], 
     approvedActionTypes: [] 
    } 
    } 
}; 

Iましたエラー:

./middleware-config-settings. Required module not found

まず、私はフローラインのチェックを無視しようとした:

// @flow 
... 
// @FlowFixMe: ignore 
import defaultSettings from './middleware-config-settings'; 
... 

middleware-config-settings.jsが存在しない場合apporachは罰金に動作すること。そうでなければ私は別の問題を抱えて:flow実行が別のエラーで失敗しnpm startmiddleware-config-settings.js作成されたファイルと、次の後:

Error suppressing comment. Unused suppression

第二に、私は.flowconfig[ignore]セクションにmiddleware-config.jsを追加してみました。しかし、その後、私はstore.jsから新しいエラーメッセージが表示されました:その後

./middleware/middleware-config. Required module not found

は、私があまりにも[ignore]セクションにstore.jsを追加し、flowがうまく実行されるが、私はそれが正しい方法ではないと思います。

第三のアプローチは、第二に似ている - 私はちょうどmiddleware-config.jsから// @flowを取り除き、flowが細かい実行されます。そしてそのアプローチもあまり良くない(すべてのモジュールはflowにする必要があります)。

だから、私は2つの質問があります:私はそのflowチェックからのファイルのいずれかを排除することなくエラーのないflow実行を取得できますか

  1. を?
  2. [ignore]セクションにmiddleware-config.jsを追加すると、なぜ私はstore.jsについてエラーが発生しますか? documentationの私の理解が正しければそれは正しい動作ではありません。

    The [ignore] heading in a .flowconfig file tells flow to ignore files matching the specified regular expressions when type checking your code.

答えて

0

私は(Required module not foundエラーを回避するため)requiremiddleware-config-settings.jsをインポートして、変数に、モジュールの名前を格納して、いくつかのハックでその問題を解決し、(The parameter passed to require() must be a literal string.エラーを回避するため)@FlowFixMeを追加すると:答えを

let moduleName = './middleware-config-settings'; 
// @FlowFixMe: import autogenerated file. 
let defaultSettings = (require(moduleName): any); 
1

いくつかのオプション:

  • 避け自動生成ファイル(私はあなたがすでにこれを考慮し、それに対して決定していると仮定します)。
  • 原型のコンフィグを含むパーマネントmiddleware-config-settings.js.flowを作成し、バージョンコントロールにチェックインします。次に、Flowは.jsファイルを検索するのではなく、そのファイルを調べ、タイプチェックを行いますが、実行ごとに実際の値が生成されます。このアプローチの主な欠点は、変更したときにファイルの構造と一致するように、.js.flowファイルの構造を確認することです。
  • npm startスクリプトに暗黙的にそのステップを含めるのではなく、必要なファイルを生成する明示的なビルドステップを導入します。次に、フローを使用する前にそのビルドステップを実行していることを確認してください。

[ignore]セクションに何かを追加すると、Flowはまったく存在しないふりをします。チェックされたファイルから無視されたファイルをインポートすると、Flowはエラーを表示します。

+0

感謝を! 1.私はそのファイルを生成する必要があります。 2.そのファイルが存在しない場合にのみ作成され、各ユーザーは自分の値で編集できます(そして、私は本当に偽のファイルをもう1つ作成したくはありません)。 3.私がやりたいことより少し難しいです。 別の方法で解決します。 – feeeper

関連する問題