[解決済み] Webpackのインポートは、インポートの順序によって未定義を返す
2023-04-10 23:05:14
質問
webpack + babelを使用しています。以下のような3つのモジュールがあります。
// A.js
// some other imports here
console.log('A');
export default 'some-const';
// B.js
import someConst from './A';
console.log('B', someConst);
export default 'something-else';
// main.js
import someConst from './A';
import somethingElse from './B';
console.log('main', someConst);
いつ
main.js
が実行されると、以下のようになりますね。
B undefined
A
main some-const
のimportを入れ替えると
main.js
,
B
になることで、得られる。
A
B some-const
main some-const
どうして
B.js
を得る
undefined
の代わりに、最初のバージョンでモジュール?何が問題なのでしょうか?
どのように解決するには?
ほぼ丸一日かけて問題を絞り込んで (別名、毛抜き作業)、ようやく循環依存症であることに気づきました。
次のような場所です。
// some other imports here
,
A
は別のモジュールをインポートします。
C
をインポートし、さらにそのインポートされた
B
.
A
で最初にインポートされます。
main.js
であるため
B
は結局、輪の最後のリンクになり、Webpack (あるいはNodeのようなCommonJSのような環境)は、単に
A
's
module.exports
は、まだ
undefined
. やがて,それは
some-const
と同じになりますが、同期コードである
B
を扱うことになります。
undefined
を処理することになります。
というコードを移動させることで、循環的な依存関係をなくす。
C
に依存しているコードを
B
を削除することで、問題が解決しました。Webpackがどうにかして警告してくれればいいのですが。
編集しています。 最後に、@cookie さんのご指摘の通りです。 循環依存性検出のためのプラグインがあります。 もしこの問題にぶつかるのを避けたいのであれば。
関連
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み】SyntaxError: モジュール外部でimport文を使用できない
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] TypeScriptプロジェクトで既存のC#クラス定義を再利用する方法
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法