npmのライブラリアップデートしたら、IE11で動かなくなった
現場の案件で、大量の npm ライブラリアップデートを担当したのですが、
IE11 でクリックイベントが起動せず苦労したので備忘録です。
※事情により、文字だけです。ご了承ください。
コンソールログにエラーが…
開発ツールを開きながら画面を再描画。
すると文字が正しくありません。
のエラーが表示されました。
英語だとsyntax error
。
IE11 は ES6 をサポートしていないため、
アロー関数(()=>
)やテンプレートリテラル({`${変数}です`})などを使っていると発生するエラーです。
しかし、next.js を使用し@babel/polyfillも設定している。
ES6 はトランスパイルされているはずなのに、発生する意味がわかりません。
調査
エラー箇所を探す
まずは、エラーが発生している箇所を探します。
大体、コンソールログに該当ファイルへ移動するリンクがあるので、
そこをクリックしファイルへ移動します。
今回は、アロー関数が原因のようです。
ビルドファイルを作成する
次にトランスパイル後のファイルを作成します。
現場では、next.js を使用しているため、next build
で作成します。
対象モジュールを探す
そして、トランスパイル後のフォルダ内をアロー関数で検索します。
ヒットした前後の内容から、問題の module を探します。
今回はaxios
の依存ライブラリis-retry-allowed
が原因でした。
根本原因
axios
のバージョンアップ
axios
をバージョンアップした結果、
is-retry-allowed
もバージョンアップした。
その結果、アロー関数を使う記述になっていた
node_modules 配下はトランスパイルしない
next.config を確認したところ、
node_modules 配下をトランスパイルしない設定になっていた。
これは、ビルドの時間を削減するための対策でした。
対応内容
next-transpile-modules
を使って、is-retry-allowed
をトランスパイル対象にしました。
is-retry-allowed
以外にも、対象 modules が有る場合があるので、
その際は、再度調査を行います。
参考記事:
まとめ
最近は、IE11 のサポートが切れるということで、
多くのライブラリが IE11 のサポートをしなくなっています。
その影響が、こんなところに出てくるとは…
今回は、私が実際、現場で調査した内容を残しましたが、
もっと簡単な調査方法があるかもしれません。
知っている方いたら、ご意見いただけると助かります。
Discussion