2017-02-10 15 views
0

モジュールのインポートとエクスポートのリファクタリングが進行中です。ここでの目標は、複数のファイル(UserReducer.jsとHome.js)で、index.jsからUserActionsをインポートすることです。ES6でのモジュールのインポートとエクスポート

のように、プロジェクトのツリー構造が見え

:これはmodules/user/index.jsの内容である

js 
|_ modules 
| |_ user 
| | |_index.js 
| | |_UserActions.js 
| | |_UserReducer.js 
| | |_UserSagas.js 
|_ containers 
| |_ Home.js 

:最初のアクションは両方UserReducer.jsで、UserActionsファイルから直接インポートされていた

import * as UserActions from './UserActions' 
import * as UserSagas from './UserSagas' 
import UserReducer from './UserReducer' 

export { UserActions, UserReducer, UserSagas } 

と次のようなHome.js:

  • in UserReducer.js:Home.jsで
  • import * as UserActions from 'modules/user/UserActions'

そして、すべてが正常に働いていました。今度は、上記の2つのインポートで上記のindex.jsファイルを使用します。 UserReducer内部

ステップ1)

、私からインポート行を変更します。これは、動作している

import { UserActions } from '.' // fetches the named export from index.js 

:に

import * as UserActions from './UserActions' 

Home.js内部

ステップ2)

、私からインポート行を変更:に

import * as UserActions from 'modules/user/UserActions' 

import { UserAction } from 'modules/user' 

今のWebPACK文句はありませんが、ブラウザUserReducerにエラーがスローされると、そのUserActionsは未定義です。最後に

import { UserActions } from 'path_to_index.js'表記の作品を使用して、限り、私は1つの場所でそれを使用するようのみ(いずれかのファイルにすることができます)。

とすぐに私は両方の場所でそれを使用するよう、すべての地獄の休憩緩い...

任意のアイデア?ありがとう

編集:上記のエラーは、user/index.jsがUserSagasをインポートしてエクスポートする場合にのみ発生することを認識しています。 UserSagasをindex.jsに追加するのではなく、ファイルから直接インポートすると、アプリケーションが正しく実行されます。

+0

したがって、UserReducer.jsでは、UserReducer.jsをインポートするindex.jsをインポートしていますか?循環依存性のように聞こえる。私はこれらが結果だと思います。とにかく、名前付きインポートの定義されていないエラーがある場所で '*'をインポートし、インポートされたものをログに記録しようとすることができます。 – estus

+0

中括弧は、指定されたモジュール(この場合はアクション)のみをインポートすると考えています。そうであれば、それは円を描くことはありません。はい、import *はアクションタイプと関数定義を必要に応じて出力します。しかし、私が望むインポートは未定義のログ – Khorkhe

+0

です。UserReducer.jsでは、UserReducer.jsをインポートするファイルをインポートしています。これは循環依存であり、CDは悪いです。実際のES6モジュール(それについてはわからない)で意図したとおりに動作するとしても、実際のES6モジュールはありません(ESモジュール仕様はまだ完成していません)。モジュールは蒸散され、あなたはバベルがどのようにCDを扱うかに頼っています。問題がCDでないことがわかったら、式から除外して、それに従って質問を再入力してください。 – estus

答えて

0

@stusは、index.jsから別のエクスポートされた部分をインポートしても循環依存を引き起こすという点で正しいです。

私はインデックスを必要としました。jsはユーザーとの一意のインターフェイスであるとしていますが、「ユーザー」以外のコンポーネントにのみ適用されるようです。内部的には、インポートはアクションファイルから直接行われます

関連する問題