LoginSignup
8
6

More than 3 years have passed since last update.

core-jsを読み込んだけど、IE11で"Exception thrown and not caught"というエラーが発生する

Last updated at Posted at 2020-02-08

Babel 7.4.0から、@babel/polyfillが非推奨になったそうです。
ではどうすれば良いのかというと、もともと@babel/polyfillがインクルードしていたcore-jsとregenerator-runtimeを直接インポートしてやれば良いらしい。
babelの公式にも書いてある。

import "core-js/stable";
import "regenerator-runtime/runtime";

設定ファイルにも書く必要がある。
このあたりの説明はこの記事に詳しい。

これでコンパイルはできるのだが、IE11でエラーが出て動かない。

SCRIPT5022: Exception thrown and not caught
internal-state.js

Google先生に問い合わせたところ、日本語の情報は見つからなかったが、同様のエラーで悩んでいる人々がいた。
core-jsの開発者に質問ぶつけている模様。
https://github.com/zloirock/core-js/issues/514
で、質問者は自力で解決したようだ

恥ずかしながら正確なところは理解できていないのだが、
どうもBabelがコンパイルするときに、core-jsのpolyfillを破壊してしまっているのが問題のようだ。
したがって、babel-loaderの除外対象としてcore-jsを指定することで解決するらしい。

私の場合はwebpackを使っているので、こんな感じで書いたところ、IE11でのエラーが出なくなった。
excludeを追加した)

webpack.config.js
module.expots = {
  /* 省略 */
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          loader: "babel-loader",
          options: {
              presets: [
                [
                  "@babel/preset-env",
                  {
                    targets: {
                      ie: 11,
                      esmodules: true
                    },
                    useBuiltIns: "entry",
                    corejs: 3
                  }
                ]
              ]
          }
        ],
        exclude: /node_modules\/(?!(core-module)\/).*/
      }
    ]
  }
}

IE11のためにわざわざpolyfillしているのに、その過程でIE11にエラーが出るなんて。
いつまでたっても拾いきれない例外を投げまくっているのは、お前のことだぞ、IEよ。

8
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
8
6