質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Babel

Babelは、JavaScriptの次世代仕様であるECMAScriptのコンパイラ。次世代の標準機能を用いて記述されたコードを、それらの機能に対応していないブラウザでも動作するコードに変換することができます。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Q&A

解決済

1回答

1378閲覧

BabelでIE11対応するのためのポリフィル適用はどのように実装すべきでしょうか?

plasticgrammer

総合スコア629

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Babel

Babelは、JavaScriptの次世代仕様であるECMAScriptのコンパイラ。次世代の標準機能を用いて記述されたコードを、それらの機能に対応していないブラウザでも動作するコードに変換することができます。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

0グッド

2クリップ

投稿2020/11/11 08:43

現在Vue.jsによるアプリケーションを開発しています。

IE11を含むES6未対応環境に対応させるため、下記の通りBabelの設定を行いました。
(package.jsonのdevDependenciesには "@vue/cli-plugin-babel": "^4.3.1" との記載があります)

  • babel.config.js

js

1module.exports = { 2 presets: [["@vue/cli-plugin-babel/preset", { 3 useBuiltIns: 'usage', 4 corejs: '3' 5 }]] 6}
  • .browserslistrc
defaults Chrome > 45 IE 11

上記設定だけで問題ないと思っていましたが、ポリフィルが適用されていないようで、IE11の場合にfetch処理にてエラーとなってしましました。
そこでindex.htmlにて下記のコードを追加し、IE11でも動くようになりました。

html

1 <script> 2 if (ua.indexOf('Trident') != -1 || ua.indexOf('MSIE') != -1) { 3 // polyfill for IE 4 document.write('<script src="https://unpkg.com/core-js-bundle@3.0.0-alpha.1"></script>'); 5 document.write('<script src="https://unpkg.com/whatwg-fetch@2.0.4/fetch.js"></script>'); 6 } 7 </script>

<質問>

Babel側の設定だけでトランスパイル+ポリフィル適用となるものと思っていましたが、ポリフィルが適用されないのは何か設定が不足しているからでしょうか?
babel.config.jsのpresetsの役割についても、十分理解できていないため何か設定が間違っているのかもしれません。
何か気づいた点がありましたらご指摘頂けると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/11/11 10:54

エラーの内容も記載して下さい。
plasticgrammer

2020/11/12 02:02

コメントありがとうございます。 問題の解決はできておりましたので、エラーの詳細は不要と考えておりました。 一旦解決できましたので、質問内容は変更なしとさせていただきます。
guest

回答1

0

ベストアンサー

ポリフィルが適用されていないようで、IE11の場合にfetch処理にてエラーとなってしましました。

fetchブラウザサイドの機能なので、BabelのPolyfillに含まれるものではありません。あくまでBabelは、純粋なプログラミング言語としてのJavaScriptのバージョン変換を行うものです。

投稿2020/11/11 10:41

編集2020/11/11 10:50
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

plasticgrammer

2020/11/12 01:32

ご回答ありがとうございました。理解が進みました。 追加で質問させて頂きますので、わかるようでしたらコメントください。 ---------- fetch.jsのみの読み込みだと(core-js-bundle@3.0.0-alpha.1 のスクリプトを読み込まないと)、以下のエラーとなりました。 Uncaught TypeError: Cannot delete property 'from' of function Int8Array() { [native code] } ---------- core-js-bundleの役割も、ブラウザ側機能のPolyfillということなのでしょうか?
maisumakun

2020/11/12 01:42

そうですね。 BabelのPolyfillのかけ方によっては、「Polyfillをブラウザ全体に出さず、Babelで変換するコードにだけ適用する」ような形とすることがありますので、全く別にfetchを読み込む場合にはfetch用のPolyfillが別途必要となる場合もあります。
plasticgrammer

2020/11/12 01:57

回答ありがとうございます。 > 「Polyfillをブラウザ全体に出さず、Babelで変換するコードにだけ適用する」 確かにエラーとなっているのは自分のコードではなく、利用しているライブラリ側だった気がします。 もう少し理解を深める必要がありそうですが、現時点での対応としては core-js-bundle, fetch.js を別途読み込む対応で問題ないように感じました。 「BabelのPolyfillのかけ方」について、参考になるサイト等ありましたらコメント頂けると助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問