[解決済み] create-react-appを使用したReactアプリでES6機能をポリフィルする最良の方法
質問
インターネットエクスプローラでReact.jsアプリケーションをテストしたところ、以下のようなES6/7コードがあることがわかりました。
Array.prototype.includes()
のような ES6/7 コードがそれを破壊することを発見しました。
を使っているのですが create-react-app を使用していますが、どうやら誰もがポリフィルを必要とするわけではなく、ビルド時間が遅くなるため、ポリフィルをあまり含めないことにしたようです (例として ここで と はこちら ). ドキュメント(執筆時)では
ランタイムサポートを必要とする他のES6+機能(例えば Array.from() や Symbol など) を使用する場合は、適切なポリフィルを手動でインクルードしていることを確認します。 ポリフィルを手動で含めるか、対象とするブラウザがすでにそれらをサポートしていることを確認してください。 サポートしていることを確認してください。
では... 手動で "含める "ための最良の方法は何でしょうか?
どのように解決するのですか?
更新
: create-react-app polyfillのアプローチとドキュメントはこの質問と回答から変更されました。現在では
react-app-polyfill
(
ここで
) を使用すると、ie11 などの古いブラウザに対応することができます。ただし、これには、"
...最小要件と一般的に使用される言語機能
のような)一般的でないES6/7機能については、以下のアプローチのいずれかを使用したいと思うでしょう。
Array.includes
)
この2つのアプローチはどちらも有効です。
1. react-app-polyfillとcore-jsから手動でインポートする。
インストール react-app-polyfill と core-js (3.0+):
npm install react-app-polyfill core-js
または
yarn add react-app-polyfill core-js
polyfills.jsというファイル(のようなもの)を作成し、ルートのindex.jsファイルにインポートしてください。そして、基本的なreact-appのpolyfillsに加え、特定の必要な機能を以下のようにインポートしてください。
/* polyfills.js */
import 'react-app-polyfill/ie11';
import 'core-js/features/array/find';
import 'core-js/features/array/includes';
import 'core-js/features/number/is-nan';
/* index.js */
import './polyfills'
...
2. ポリフィルサービス
を使用します。 polyfill.io CDN を使用して、index.html に次の行を追加することで、ブラウザ固有のカスタムポリフィルを取得できます。
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=default,Array.prototype.includes"></script>
注:私は
Array.prototype.includes
機能はデフォルトの機能セットには含まれていないため、明示的に要求する必要がありました。
関連
-
[解決済み] create-react-app のインポートが src ディレクトリの外にある場合の制限について
-
[解決済み] create-react-appベースのプロジェクトを実行するためのポートを指定する方法は?
-
[解決済み】create-react-appでテンプレートが提供されない。
-
[解決済み] create-react-appベースのプロジェクトにフォントを追加する方法は?
-
[解決済み] [Solved] create react app not pick up .env files?
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?