'Simbol' tidak ditentukan di IE setelah menggunakan babel

87

Saya memiliki reactjsaplikasi yang ditulis menggunakan standar ES6, dan saya gunakan webpackuntuk membangunnya. The webpackbeban yang jsmodul menggunakan babel-loader. Untuk lebih spesifik, saya menggunakan versi paket berikut: ├── [email protected] ├── [email protected] ├── [email protected] └── [email protected]

Namun, setelah membangunnya, IE 10 memberikan kesalahan berikut 'Symbol' is undefined. Bukankah babelseharusnya yang mendefinisikan Symbol? Apakah ada konfigurasi khusus untuk webpackatau babelsaya perlu mengatur agar dapat berfungsi? Saya menggunakan {stage: 0}konfigurasi di file.babelrc .

Bantuan apa pun akan dihargai, Terima kasih!

Jurom
sumber
1
Bisakah Anda menambahkan stacktrace juga?

Jawaban:

94

Anda dapat meminta polyfill di titik masuk ke kode Anda agar dapat digabungkan dengan JavaScript lainnya.

Salah satu opsinya adalah menggunakan:

require('babel-polyfill');

Atau:

import 'babel-polyfill';

Semua itu dijelaskan dalam dokumentasi .

Łukasz
sumber
2
Saya melawan serangga ini selama berjam-jam! TERIMA KASIH
P. Brian.Mackey
untuk beberapa alasan ini tidak berfungsi untuk saya di IE10, IE11 jadi saya hanya memasukkannya sebagai skrip terpisah untuk IE seperti yang disebutkan oleh Jurom. Saya mungkin akan memisahkannya dari bundel utama saya di webpack.
svnm
1
Halo @Jurom dan @ Lukasz, saya menghadapi masalah yang sama dengan Symbol dan fungsinya seperti Symbol. Iterator tidak ditentukan di IE, dengan menggunakan Babel Polyfill ini, halaman saya tidak memuat tetapi muncul kesalahan dari IE yang mogok dan meminta untuk memuat ulang.
Rahul
1
babel-polyfillmemperbaiki masalah ini untuk saya. Terima kasih!
daveaspinall
Ini berfungsi untuk saya di Angular 10, tetapi hanya jika import "@babel/polyfill"; pernyataan itu sebelumnya import 'zone.js/dist/zone';(yang masuk akal karena kesalahan Simbol yang saya dapatkan berasal dari zone.js)
ewolfman
68

Oke, akhirnya saya menemukan bahwa babelsaja tidak ada polyfill. Termasuk skrip <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script>memecahkan masalah ini untuk saya.

Jurom
sumber
4
apakah ada metode yang hanya dapat saya masukkan skrip ini dalam HTML seperti: <! - [if IE]> script (type = 'text / javascript'). memerlukan ('babel-core / browser-polyfill.js') <! [endif] ->
PinkyJie
Saya memiliki masalah yang sama di IE11 dan ini memperbaikinya untuk saya juga. Terima kasih!
Waterskier19
@Jurom, Ketika saya menambahkan file ini di html saya, IE saya mogok :-(. Tolong bantu
Rahul
@Rahul versi IE apa? Apa yang Anda maksud dengan kecelakaan? Bisakah Anda memberikan log kesalahan?
Jurom
IE Edge. Ini menunjukkan Internet Explorer tidak berfungsi. Dan saya tidak dapat membuat log apa pun.
Rahul
8

Solusi ini akan bekerja dengan pasti, itu berhasil untuk saya ketika saya mengalami kesalahan: 'Simbol' tidak ditentukan di IE. Ini bekerja sebelumnya di Chrome dan Firefox tetapi IE melakukan kesalahan ini. Butuh beberapa jam untuk menemukan solusi ini. Saya menggunakan React terbaru saat ini react "react": "^ 16.5.0" pada mesin windows.

1. Install babel-polyfill
npm install --save-dev babel-polyfill
In package.json, it should have the following entries

"devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^8.0.2",
    "babel-polyfill": "^6.26.0",
    "babel-preset-react": "^6.24.1"
  }

2. In index.js, add

    import babelPolyfill from 'babel-polyfill';

Masalah harus diselesaikan

Kiran Chaudhari
sumber
5
Jika Anda mengimpor polyfill Babel di index.js, Anda harus menginstalnya sebagai dependensi reguler, bukan dependensi dev
Patrick Hund
Terima kasih! Ini tampaknya menjadi satu-satunya cara agar ie11 bekerja dengan cara saat ini di mana Babel dan Webpack bekerja sama untuk mengkompilasi kode. Mengapa Babel menggunakan Simbol es6 untuk membangun modul es5 adalah sebuah misteri, karena jelas tidak kompatibel dengan browser lama, dan kompatibilitas dengan browser lama adalah alasan keberadaan Babel.
D13
5

Oke, saya mengalami masalah yang sama, tetapi dalam kasus saya itu sangat berbeda, jadi pada dasarnya Anda perlu memasukkan skrip dalam file indeks seperti di bawah ini:

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script>

Tetapi dalam kasus saya, saya sudah memasukkannya, setelah beberapa penyelidikan saya menemukan bahwa proxy saya memblokir skrip ...

Jadi pastikan Anda memasukkannya ke dalam index.html dan juga pastikan bahwa Anda memiliki akses ke skrip dari mana Anda membutuhkannya untuk menghindari kesalahan terjadi ... cara terbaik cukup salin dan tempel url di browser ...

Tapi sekarang kita sampai pada poin ini, itu tidak berbicara tentang Simbol itu sendiri, Simbol apa yang tidak dapat dikenali di IE?

Fungsi Symbol () mengembalikan nilai simbol tipe, memiliki properti statis yang mengekspos beberapa anggota objek bawaan, memiliki metode statis yang mengekspos registri simbol global, dan menyerupai kelas objek bawaan tetapi tidak lengkap sebagai konstruktor karena itu tidak mendukung sintaks "Simbol baru ()".

Setiap nilai simbol yang dikembalikan dari Symbol () bersifat unik. Nilai simbol dapat digunakan sebagai pengenal untuk properti objek; ini adalah satu-satunya tujuan tipe data. Beberapa penjelasan lebih lanjut tentang tujuan dan penggunaan dapat ditemukan di entri glosarium untuk Simbol.

Simbol tipe data adalah tipe data primitif.

Alireza
sumber
1
Ini memperbaikinya juga untuk saya. Saya menggunakan kompiler online Babel dan memasukkan skrip ini ke dalam HTML saya, voila.
ViktorMS
1
Saya tidak percaya satu baris ini berhasil! mengejar polyfills untuk bereaksi + bahan ui selama berhari-hari dan ini memperbaiki semuanya dengan satu baris.
jpro
4

dalam dokumentasi tentang Runtime

// in bash
npm install babel-transform-runtime --save-dev

// in gulpfile
.pipe(babel({
  plugins: ['transform-runtime']
}))

edit: lebih baik lagi tentang heroku dalam mode prod, gunakan --save daripada --save-dev

Jacek Pietal
sumber
Modul ini sekarang disebut@babel/plugin-transform-runtime
Kevin Reilly
0

Jika Anda mendapatkan kesalahan ini di aplikasi Angular, Anda perlu menghapus komentar baris berikut di polyfills.ts -

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';
David Lindon
sumber