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
を追加した)
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よ。