Create-react-app: Aplikasi dengan `react-scripts` v4.0.0 tidak bekerja di IE11

Dibuat pada 25 Okt 2020  ·  18Komentar  ·  Sumber: facebook/create-react-app

Jelaskan bugnya

Setelah memutakhirkan aplikasi saya dari react-scripts 3.4.4 menjadi 4.0.0, saya melihat bahwa aplikasi tidak berfungsi sama sekali di IE11.
Selain itu - ketika saya membuat aplikasi baru dari CRA terbaru, menambahkan react-app-polyfill Saya melihat itu juga tidak berfungsi sama sekali.
image

package.json terlihat seperti ini:

{
  "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"
    ]
  }
}

Kesalahan yang sama muncul juga ketika saya menjalankan yarn build dan melayani dari direktori build/ .

Apakah Anda mencoba memulihkan ketergantungan Anda?

Ini adalah perilaku CRA default.

Istilah apa yang Anda telusuri di Panduan Pengguna?

Ada beberapa masalah umum yang didokumentasikan, seperti pengamat tidak mendeteksi perubahan, atau build gagal. Semuanya dijelaskan di bagian Pemecahan Masalah dari Panduan Pengguna: https://facebook.github.io/create-react-app/docs/troubleshooting. Harap pindai beberapa bagian ini untuk mengetahui masalah umum. Selain itu, Anda dapat mencari sendiri di Panduan Pengguna untuk menemukan masalah yang Anda alami: https://facebook.github.io/create-react-app/ Jika Anda tidak menemukan solusinya, silakan bagikan kata-kata yang Anda cari . Ini membantu kami meningkatkan dokumentasi untuk pembaca mendatang yang mungkin mengalami masalah yang sama.

(Tulis jawaban Anda di sini jika relevan.)

Lingkungan Hidup

Untuk membantu mengidentifikasi apakah suatu masalah khusus untuk platform, browser, atau versi modul, informasi tentang lingkungan Anda diperlukan. Hal ini memungkinkan pengelola dengan cepat mereproduksi masalah dan memberikan umpan balik. Jalankan perintah berikut di folder aplikasi React Anda di terminal. Catatan: Hasilnya langsung disalin ke clipboard Anda. `npx create-react-app --info` Tempelkan output dari perintah di bagian di bawah ini.
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

Langkah-langkah untuk mereproduksi

  1. Buat aplikasi CRA baru dengan menggunakan template ketikan
  2. yarn add react-app-polyfill
  3. Tambahkan import 'react-app-polyfill/ie11'; import 'react-app-polyfill/stable'; ke bagian atas index.tsx
  4. yarn start
  5. Perhatikan bahwa situs berfungsi dengan sempurna di browser normal dan itu adalah layar kosong di IE

Perilaku yang diharapkan

Bagaimana Anda mengharapkan alat tersebut berperilaku? Tidak masalah jika Anda tidak yakin pemahaman Anda benar. Tulis saja apa yang menurut Anda akan terjadi.

Situs harus berfungsi (Saya tidak mengharapkan keajaiban. Ini adalah IE secara keseluruhan, tetapi halaman kosong sangat buruk)

Perilaku sebenarnya

Apakah ada yang salah? Apakah ada yang rusak, atau tidak berperilaku seperti yang Anda harapkan? Harap lampirkan tangkapan layar jika memungkinkan! Mereka sangat membantu untuk mendiagnosis masalah.

image

Demo yang dapat direproduksi

Jika Anda bisa, silakan bagikan proyek yang mereproduksi masalah tersebut. Ini adalah satu-satunya cara paling efektif untuk segera menyelesaikan masalah. Ada dua cara untuk melakukannya: * Buat aplikasi baru dan coba mereproduksi masalah di dalamnya. Ini berguna jika Anda secara kasar mengetahui di mana masalahnya, atau tidak dapat membagikan kode yang sebenarnya. * Atau, salin aplikasi Anda dan hapus beberapa hal sampai Anda pergi dengan demo minimal yang dapat direproduksi. Ini berguna untuk menemukan akar masalahnya. Anda kemudian dapat membuat proyek baru secara opsional. Ini adalah panduan yang bagus untuk membuat demo bug: https://stackoverflow.com/help/mcve Setelah Anda selesai, dorong proyek ke GitHub dan tempel link di bawah ini:

(Tempel tautan ke proyek contoh dan instruksi yang tepat untuk mereproduksi masalah.)

Apa yang terjadi jika Anda melewati langkah ini? Kami akan mencoba membantu Anda, tetapi dalam banyak kasus tidak mungkin karena informasi penting hilang. Dalam hal ini, kami akan menandai masalah sebagai memiliki prioritas rendah, dan akhirnya menutupnya jika tidak ada arah yang jelas. Kami masih menghargai laporan itu, karena pada akhirnya orang lain mungkin membuat contoh yang dapat direproduksi untuk itu. Terima kasih telah membantu kami membantu Anda!
bug report needs triage

Komentar yang paling membantu

+, masalah yang sama pada build produksi
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
image

Semua 18 komentar

Jika saya tidak salah, proyek baru tidak akan berfungsi di IE sama sekali dalam mode pengembangan karena konfigurasi browserslist .

image

(lihat package.json ).

@ Pierre-Do
Ya, saya memperbarui masalah saya dengan informasi yang hilang.
Saya lupa bahwa IE11 tidak didukung di luar kotak, tetapi dengan react-app-polyfill juga tidak berfungsi :(

+, masalah yang sama pada build produksi
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
image

solusi saya:

import 'react-app-polyfill/ie11';
// import 'react-app-polyfill/stable';
import 'core-js/stable';
import 'regenerator-runtime/runtime';

Saya juga terpengaruh oleh masalah ini

Saya dapat mengonfirmasi bahwa solusi @ezBill berfungsi untuk saya.
Mungkin react-app-polyfill perlu diperbaiki?

Saya dapat mengonfirmasi bahwa solusi @ezBill berfungsi untuk saya.

+1

Solusi tidak berhasil untuk saya, kesalahan tetap ada.

Polyfill saya terlihat seperti ini dan saya tidak punya masalah dengan IE11:

import "react-app-polyfill/ie11";
import "react-app-polyfill/stable";

Perhatikan bahwa ini harus berada di atas impor lain yang akan rusak tanpa polyfill ini diterapkan. Ditambah polyfill tidak menyediakan beberapa API esoterik seperti TextEncoder jadi Anda masih perlu memuat polyfill untuk itu jika Anda membutuhkannya karena alasan tertentu.

Saya pikir transformasi jsx baru menyebabkan ini, coba nonaktifkan baik dengan menambahkan /** <strong i="5">@jsxRuntime</strong> classic */ ke bagian atas index.js utama Anda di mana Anda juga mengimpor polyfills Anda - atau setel variabel lingkungan DISABLE_NEW_JSX_TRANSFORM=true . Dalam kasus saya, salah satu dari itu memperbaiki ini.

Dugaan saya adalah bahwa dengan mengimpor polyfills terlebih dahulu Anda dapat membuatnya dimuat sebelum bereaksi, tetapi Anda tidak dapat membuatnya dimuat sebelum baris import {jsx as _jsx} from 'react/jsx-runtime'; yang disisipkan oleh kompilator.

@msbarry Saya dapat mengonfirmasi bahwa ini memperbaiki masalah di sini. Terima kasih atas bantuannya!

Kami mengalami masalah yang sama ini. Kami telah mengonversi banyak basis kode kami ke format JSX baru (format di mana Anda tidak perlu mengimpor React lagi).

Kabar baik! Kami berhasil mempertahankan semua sintaks JSX yang baru!

Kami hanya perlu menerapkan ini di bagian atas file 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'

Menambahkan komentar karena jika tidak, kami dapat melihat ini menjadi sesuatu yang tidak akan dipahami orang dan mungkin akan meninggalkan berkeliaran di basis kode selamanya.

Satu-satunya downside adalah bahwa kami tidak boleh membuat treeshaking mengurangi ukuran bundel kami yang merupakan salah satu alasan utama kami meningkatkan ke React 17 di tempat pertama :(

FWIW kami membagi file index.ts menjadi file init.ts dan main.tsx dimana init.ts mengimpor semua polyfill yang relevan dan main.tsx adalah entrypoint yang sebenarnya ( berisi kode React) dan index.ts hanya mengimpor keduanya secara berurutan. Ini memastikan semua modul yang mungkin memerlukan polyfill untuk diterapkan dimuat setelah polyfill dan penamaan memastikan bahwa bahkan saat menggunakan pengurutan impor otomatis, polyfill datang sebelum titik masuk utama.

Ini mungkin solusi yang lebih bisa diterapkan daripada harus mengatasi masalah ini.

Tak satu pun di atas tampaknya berhasil.

Kesalahan IE11 dengan

image

Mengklik kesalahan membawa kita ke sini

image

Versi IE

image

Berikut adalah contoh yang sangat sederhana untuk direproduksi

  1. npx create-react-app ie11app
  2. yarn add react-app-polyfill
  3. Perbarui 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')
);
  1. Tambahkan ie 11 ke browerslist di 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"
    ]
  }
}
  1. yarn start

Coba hapus import 'react-app-polyfill/stable'; dari index.js.

Anda hanya perlu import 'react-app-polyfill/ie11'

Sepertinya bukan masalah polyfill. Kode yang Anda lihat di debugger bukanlah ES5, ia menggunakan argumen destrukturisasi dan default, yang keduanya tidak didukung oleh IE11. Coba gunakan "ie >= 11" dalam browserslist alih-alih "ie 11" . Itu yang saya miliki, tidak yakin apakah salah satu sintaks harus berfungsi.

@ Dan503 @pluma Saya mencoba keduanya, "ie >= 11" dan menghapus import 'react-app-polyfill/stable'; , tetapi masih belum berhasil.

Bisakah Anda berbaik hati dan membuat npx create-react-app ie11app dan memeriksa apakah itu benar-benar masih berfungsi untuk Anda di IE11?

Terima kasih

Memperbarui:
Mengembalikan kembali ke "react-scripts": "^3.0.0" berfungsi pada IE 11 bahkan dengan "react": "^17.0.1",
Tapi "react-scripts": "4.0.0" masih rusak untukku

Saya juga mencoba banyak solusi ini. Satu-satunya yang berhasil adalah menurunkan react-scripts menjadi 3.4.4 .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat