14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AngularのChunkエラーを解説する

Last updated at Posted at 2020-10-23

はじめに

Angularのアプリを開発されている方は一度は以下のエラーに直面したことがあるのではないでしょうか。
スクリーンショット 2020-10-23 20.23.03.png
青い四角で囲まれているところを見ると、 ChunkLoadError: Loading chunk 14 failed. と表示されています。

このエラーメッセージがいわゆる Chunkエラー です。
もし今までにこのエラーメッセージを見たことがあり、対応に困っているなどあれば参考になるかもしれません。

Chunkエラーとは何か、なぜ起きるのか

Angularの公式ドキュメントにわかりやすい説明があったので引いてきました。

このファイルの整合性は、遅延読み込みモジュールの場合に特に重要です。JSバンドルは多くの遅延チャンクを参照しますが、遅延チャンクのファイル名は、アプリケーションの特定のビルドに固有のものです。実行中のバージョンXのアプリケーションは遅延チャンクを読み込もうとしますが、サーバーではバージョンX+1にすでに更新されている場合、遅延読み込み操作は失敗します。

上記の内容をざっくり図にしてみました。
図内では、バージョンAのアプリでサーバーのバージョンBの遅延チャンクを読み込もうとしてエラーになる図です。
基本的にChunkエラーはアプリの再起動やブラウザのリロードで解消することが可能です。

LazyLoad_Chunkerror.png

対処法

Chunkエラーの概要がわかったところで、じゃあどうすれば良いのかを考えてみます。
上で挙げてますが、アプリの再起動(リロード)をすれば解決します。

こちらのサイトを参考にすると、リロードのアプローチをかけるためにグローバルにHookできるハンドラを用意しています。

  handleError(error: any): void {
   const chunkFailedMessage = /Loading chunk [\d]+ failed/;

    if (chunkFailedMessage.test(err.message)) {
      window.location.reload();
    }
  }

試した感じだと、chunkFailedMessageは一律コピペでよく、その後の対応はアプリケーション次第になるかと思います。(上記の例だとブラウザのリロードをかけているようですね。)

終わりに

以上がざっくりとしたChunkエラーの説明と対処法になります。
初めはこのエラーは何が起こっているんだと戸惑いますが、どういう経緯で発生しているかが理解できると対応も検討しやすいですね。

ではまた。

参考

Angular公式ドキュメント
Angular Lazy Routes & loading chunk failed

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?