アプリをreact-scripts3.4.4から4.0.0にアップグレードした後、アプリがIE11でまったく機能しないことがわかりました。
さらに、最新のCRAから新しいアプリを作成し、 react-app-polyfill
を追加したところ、まったく機能していないことがわかりました。
私のpackage.json
は次のようになります。
{
"name": "cra4",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"@types/jest": "^26.0.15",
"@types/node": "^12.0.0",
"@types/react": "^16.9.53",
"@types/react-dom": "^16.9.8",
"react": "^17.0.1",
"react-app-polyfill": "2.0.0",
"react-dom": "^17.0.1",
"react-scripts": "4.0.0",
"typescript": "^4.0.3",
"web-vitals": "^0.2.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
">0.2%",
"not dead",
"not op_mini all"
]
}
}
yarn build
を実行し、 build/
ディレクトリからサービスを提供する場合にも、同じエラーが表示されます。
これはデフォルトのCRAの動作です。
(該当する場合は、ここに回答を記入してください。)
Environment Info:
current version of create-react-app: 3.4.1
running from C:\Users\XXX\AppData\Local\Yarn\Data\global\node_modules\create-react-app
System:
OS: Windows 10 10.0.19041
CPU: (16) x64 AMD Ryzen 7 3700X 8-Core Processor
Binaries:
Node: 14.14.0 - C:\Program Files\nodejs\node.EXE
Yarn: 1.22.5 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
npm: 6.14.8 - C:\Program Files\nodejs\npm.CMD
Browsers:
Edge: 44.19041.423.0
Internet Explorer: 11.0.19041.1
npmPackages:
react: ^17.0.1 => 17.0.1
react-dom: ^17.0.1 => 17.0.1
react-scripts: 4.0.0 => 4.0.0
npmGlobalPackages:
create-react-app: Not Found
yarn add react-app-polyfill
index.tsx
先頭にimport 'react-app-polyfill/ie11'; import 'react-app-polyfill/stable';
を追加しますyarn start
サイトは機能するはずです(奇跡は期待していません。全体的にIEですが、空白のページは非常に悪いです)
(サンプルプロジェクトへのリンクと、問題を再現するための正確な手順を貼り付けてください。)
このステップをスキップするとどうなりますか? お手伝いさせていただきますが、重要な情報が不足しているため不可能な場合が多いです。 その場合、問題に優先度の低いものとしてタグを付け、明確な方向性がない場合は最終的に問題をクローズします。 最終的には他の誰かが再現可能な例を作成する可能性があるため、レポートには引き続き感謝しています。 私たちがあなたを助けるのを手伝ってくれてありがとう!私が間違っていなければ、 browserslist
構成のため、開発モードでは新しいプロジェクトはIEでまったく機能しません。
( package.json
)。
@ Pierre-Do
はい、不足している情報で問題を更新しました。
IE11がそのままではサポートされていないことを忘れましたが、 react-app-polyfill
ではうまく機能しません:(
+、本番ビルドで同じ問題
https://reactjs.org/docs/error-decoder.html/?invariant=31&args [] = object%20with%20keys%20%7B%24%24typeof%2C%20type%2C%20key%2C%20ref%2C %20props%2C%20_owner%7D
私の回避策:
import 'react-app-polyfill/ie11';
// import 'react-app-polyfill/stable';
import 'core-js/stable';
import 'regenerator-runtime/runtime';
私もこの問題の影響を受けています
@ezBillソリューションが機能することを確認できます。
たぶんreact-app-polyfill
を修正する必要がありますか?
@ezBillソリューションが機能することを確認できます。
+1
回避策が機能していません。エラーが残ります。
私のポリフィルは次のようになり、IE11では問題ありません。
import "react-app-polyfill/ie11";
import "react-app-polyfill/stable";
これらは、これらのポリフィルが配置されていないと壊れてしまう他のインポートよりも上にある必要があることに注意してください。 さらに、ポリフィルはTextEncoder
ようないくつかの難解なAPIを提供しないため、何らかの理由で必要な場合は、それらのポリフィルをロードする必要があります。
新しいjsxトランスフォームがこれを引き起こしていると思います。ポリフィルもインポートするメインのindex.jsの先頭に/** <strong i="5">@jsxRuntime</strong> classic */
を追加するか、 DISABLE_NEW_JSX_TRANSFORM=true
環境変数を設定して無効にしてみてください。 私の場合、これらのいずれかがこれを修正します。
私の推測では、最初にポリフィルをインポートすることで、反応する前にそれらをロードすることができますが、コンパイラーが挿入するimport {jsx as _jsx} from 'react/jsx-runtime';
行の前にロードすることはできません。
@msbarryこれで問題が解決することを確認できます。 お手伝いありがとう!
これと同じ問題が発生しました。 ただし、コードベースの多くはすでに新しいJSX形式( React
をインポートする必要がない形式)に変換されています。
朗報です! 新しいJSX構文をすべて維持することができました。
これをsrc/index.js
ファイルの先頭に適用するだけで済みました。
/** <strong i="10">@jsxRuntime</strong> classic */
import 'react-app-polyfill/ie11'
// IE11 needs "jsxRuntime classic" for this initial file which means that "React" needs to be in scope
// https://github.com/facebook/create-react-app/issues/9906
import React from 'react'
コメントを追加しました。そうしないと、これが人々が理解できないものであり、おそらくコードベースに永遠にぶら下がってしまう可能性があるためです。
唯一の欠点は、ツリーシェイクでバンドルサイズを縮小できないことです。これは、最初にReact17にアップグレードした主な理由の1つでした:(
FWIW index.ts
ファイルをinit.ts
main.tsx
ファイルとinit.ts
は関連するすべてのポリフィルをインポートし、 main.tsx
は実際のエントリポイントです( Reactコードを含む)とindex.ts
は、両方を順番にインポートするだけです。 これにより、ポリフィルを有効にする必要のあるモジュールがポリフィルの後にロードされ、インポートの自動並べ替えを使用する場合でも、ポリフィルがメインエントリポイントの前に来るように名前が付けられます。
これは、この問題を回避するよりも実行可能な解決策になる可能性があります。
上記のどれも機能していないようです。
IE11エラーと
エラーをクリックすると、ここに表示されます
IEバージョン
これは再現するための非常に簡単な例です
npx create-react-app ie11app
yarn add react-app-polyfill
index.js
更新します/** <strong i="23">@jsxRuntime</strong> classic */
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<div>Come on</div>,
document.getElementById('root')
);
ie 11
にbrowerslist
でpackage.json
{
"name": "ie11app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"react": "^17.0.1",
"react-app-polyfill": "^2.0.0",
"react-dom": "^17.0.1",
"react-scripts": "4.0.0",
"web-vitals": "^0.2.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all",
"ie 11"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version",
"ie 11"
]
}
}
yarn start
index.jsからimport 'react-app-polyfill/stable';
を削除してみてください。
必要なのはimport 'react-app-polyfill/ie11'
だけです
それはポリフィルの問題のようには見えません。 デバッガーに表示されているコードはES5ではなく、破壊とデフォルトの引数を使用していますが、どちらもIE11ではサポートされていません。 "ie 11"
代わりにbrowserslist
"ie >= 11"
を使用してみてください。 それは私が持っているものであり、どちらの構文も機能するかどうかはわかりません。
@ Dan503 @pluma "ie >= 11"
とimport 'react-app-polyfill/stable';
両方を試しましたが、それでもうまくいきませんでした。
親切にして、新しいnpx create-react-app ie11app
を作成し、IE11で実際に機能しているかどうかを確認してください。
ありがとうございました
更新:
"react-scripts": "^3.0.0"
戻すと、 "react": "^17.0.1",
でもIE 11
で機能します
しかし、 "react-scripts": "4.0.0"
はまだ私にとって壊れています
また、これらのソリューションの多くを試しました。 動作したのはreact-scripts
を3.4.4
にダウングレードすることだけ
最も参考になるコメント
+、本番ビルドで同じ問題
https://reactjs.org/docs/error-decoder.html/?invariant=31&args [] = object%20with%20keys%20%7B%24%24typeof%2C%20type%2C%20key%2C%20ref%2C %20props%2C%20_owner%7D