Skip to content

Commit 2999223

Browse files
authored
docs(troubleshooting): add section for Failed to fetch dynamically imported module error (#2123)
1 parent c78aced commit 2999223

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

guide/build.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ window.addEventListener('vite:preloadError', (event) => {
7878
})
7979
```
8080

81-
新しいデプロイが行われると、ホスティングサービスは前回のデプロイからアセットを削除することがあります。その結果、新しいデプロイメントの前にあなたのサイトを訪れたユーザーがインポートエラーに遭遇してしまう可能性があります。このエラーが起こるのは、そのユーザーのデバイス上で実行されているアセットが古くなり、対応する削除された古いチャンクをインポートしようとしてしまうためです。このイベントは、このような状況に対処するのに便利です。
81+
新しいデプロイが行われると、ホスティングサービスは前回のデプロイからアセットを削除することがあります。その結果、新しいデプロイメントの前にあなたのサイトを訪れたユーザーがインポートエラーに遭遇してしまう可能性があります。このエラーが起こるのは、そのユーザーのデバイス上で実行されているアセットが古くなり、対応する削除された古いチャンクをインポートしようとしてしまうためです。このイベントは、このような状況に対処するのに便利です。この場合、HTML ファイルに `Cache-Control: no-cache` を設定してください。そうしないと古いアセットが参照され続けてしまいます。
8282

8383
## ファイル変更時のリビルド
8484

guide/troubleshooting.md

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,45 @@ HMR が処理されているものの、それが循環依存関係の中にあ
150150

151151
`ENOENT: no such file or directory``Module not found` のようなエラーに遭遇した場合、これはプロジェクトが大文字と小文字を区別しないファイルシステム(Windows/macOS)で開発され、大文字と小文字を区別するファイルシステム(Linux)でビルドされたときによく発生します。インポートが正しい大文字と小文字を使用していることを確認してください。
152152

153+
### `Failed to fetch dynamically imported module` エラー
154+
155+
> TypeError: Failed to fetch dynamically imported module
156+
157+
このエラーはいくつかのケースで発生します:
158+
159+
- バージョンの不一致
160+
- ネットワーク環境の悪化
161+
- ブラウザー拡張によるリクエストのブロック
162+
163+
#### バージョンの不一致
164+
165+
アプリケーションの新しいバージョンをデプロイした時、HTML ファイルと JS ファイルは新しいデプロイメントで削除された古いチャンク名を参照し続けます。これは以下の場合に発生します:
166+
167+
1. ユーザーのブラウザーに古いバージョンのアプリがキャッシュされている
168+
2. 異なるチャンク名を持つ新しいバージョンをデプロイした(コード変更による)
169+
3. キャッシュされた HTML が、もう存在しないチャンクを読み込もうとする
170+
171+
フレームワークを使用している場合は、この問題に対する組み込みのソリューションがあるかもしれませんので、まずそちらのドキュメントを参照してください。
172+
173+
これを解決するために、以下のことができます:
174+
175+
- **古いチャンクを一時的に保持する**: キャッシュされたユーザーがスムーズに移行できるよう、前回のデプロイメントのチャンクを一定期間保持することを検討してください。
176+
- **サービスワーカーを使用する**: すべてのアセットを事前取得してキャッシュするサービスワーカーを実装してください。
177+
- **動的チャンクを事前取得する**: `Cache-Control` ヘッダーにより HTML ファイルがブラウザーにキャッシュされている場合、これは役に立たないことに注意してください。
178+
- **グレースフルフォールバックを実装する**: チャンクが見つからない場合にページをリロードするよう、動的インポートにエラーハンドリングを実装してください。詳細は[読み込みエラーハンドリング](./build.md#load-error-handling)を参照してください。
179+
180+
#### ネットワーク環境の悪化
181+
182+
このエラーは不安定なネットワーク環境で発生する可能性があります。例えば、ネットワークエラーやサーバーダウンタイムによりリクエストが失敗した場合です。
183+
184+
ブラウザーの制限により、動的インポートを再試行することはできないことに注意してください([whatwg/html#6768](https://github.com/whatwg/html/issues/6768))。
185+
186+
#### ブラウザー拡張によるリクエストのブロック
187+
188+
ブラウザー拡張(広告ブロッカーなど)がそのリクエストをブロックしている場合にもエラーが発生することがあります。
189+
190+
これらの拡張機能はファイル名に基づいてリクエストをブロックすることが多いため(例: `ad``track` を含む名前)、[`build.rollupOptions.output.chunkFileNames`](../config/build-options.md#build-rollupoptions)で異なるチャンク名を選択することで回避できる可能性があります。
191+
153192
## 最適化された依存関係
154193

155194
### ローカルパッケージにリンクする際、事前バンドルした依存関係が古くなる
@@ -206,7 +245,11 @@ Vite は非厳格モード(sloppy モード)でのみ動作するコード
206245

207246
### ブラウザーの拡張機能
208247

209-
ブラウザーの拡張機能(広告ブロッカーなど)によっては、Vite クライアントが Vite 開発サーバーにリクエストを送信できなくすることがあります。この場合、白い画面が表示され、ログにはエラーが出力されません。この問題が発生した場合は、拡張機能を無効にしてみてください。
248+
ブラウザーの拡張機能(広告ブロッカーなど)によっては、Vite クライアントが Vite 開発サーバーにリクエストを送信できなくすることがあります。この場合、白い画面が表示され、ログにはエラーが出力されません。また、以下のようなエラーが表示されることもあります:
249+
250+
> TypeError: Failed to fetch dynamically imported module
251+
252+
この問題が発生した場合は、拡張機能を無効にしてみてください。
210253

211254
### Windows のクロスドライブリンク
212255

0 commit comments

Comments
 (0)