モジュールのインポートとエクスポートのリファクタリングが進行中です。ここでの目標は、複数のファイル(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に追加するのではなく、ファイルから直接インポートすると、アプリケーションが正しく実行されます。
したがって、UserReducer.jsでは、UserReducer.jsをインポートするindex.jsをインポートしていますか?循環依存性のように聞こえる。私はこれらが結果だと思います。とにかく、名前付きインポートの定義されていないエラーがある場所で '*'をインポートし、インポートされたものをログに記録しようとすることができます。 – estus
中括弧は、指定されたモジュール(この場合はアクション)のみをインポートすると考えています。そうであれば、それは円を描くことはありません。はい、import *はアクションタイプと関数定義を必要に応じて出力します。しかし、私が望むインポートは未定義のログ – Khorkhe
です。UserReducer.jsでは、UserReducer.jsをインポートするファイルをインポートしています。これは循環依存であり、CDは悪いです。実際のES6モジュール(それについてはわからない)で意図したとおりに動作するとしても、実際のES6モジュールはありません(ESモジュール仕様はまだ完成していません)。モジュールは蒸散され、あなたはバベルがどのようにCDを扱うかに頼っています。問題がCDでないことがわかったら、式から除外して、それに従って質問を再入力してください。 – estus