背景
Bugsnagでオブジェクトは 'finally' プロパティまたはメソッドをサポートしていません
とエラーが吐かれることから調査をしていた。どうやらnew Promise.finally()
がIE非対応なことに起因しているようである。MDN - Promise.prototype.finally()
そこで、package.jsonを確認してみると、以下のようになっていた。
- babel-polyfillは入っているじゃないか
- 最後のアップデートは3年前って化石プロジェクトか?w
普段あまり関わらないプロジェクトなので、たまに触りにくると、こういうものを見つけたりする。
さて、ここである疑問が浮かんだ。
babel-polyfill
と@babel/polyfill
の違いってなんだ?
調べて見た
babel-polyfill
とググっても、結果としてヒットするのは@babel/polyfill
のほうだ。
同じものなのか?と思って、yarn upgrade babel-polyfill --latest
とやってみるも、更新されない。(*後から考えるとそりゃそうだってツッコミたくなるが、スルーしてください)
Babelのバージョン一覧を確認してみる
どうやら同じである。ということは、メジャーアップデートの際に何かしら変更があったのか?
ということで、Babel 7 Releasedを記事を読んでみた。そして下の方にスクロールすると...
あった。これか
Move us to the @babel namespace by switching to using "scoped" packages (details). This helps differentiate official packages, so babel-core becomes @babel/core (and no squatting)
なるほど、バージョンが7.0.0になった時に、名前空間が変わったようだ。これが影響して、--latest
をつけただけでは単純にパッケージが@babel/polyfill
に切り替わらなかったのである。
結論
- 同じパッケージであるが、バージョン7.0.0をきっかけに名前空間が変わっている
- パッケージの更新をするには、改めて
yarn add -D @babel/polyfill
をしたのち、yarn remove babel-polyfill
となる。
*ただし、Babel7.4.0から@babel/polyfillは非推奨になっているので、ご了承ください
=> Babel7.4で非推奨になったbabel/polyfillの代替手段と設定方法