"Символ" не определен в IE после использования babel

У меня есть приложение reactjs, написанное с использованием стандартов ES6, и я использую webpack для его создания. webpack загружает модули js с помощью babel-loader. Чтобы быть конкретным, я использую следующие версии пакетов: ├── [email protected] ├── [email protected] ├── [email protected] └── [email protected]

Однако, после его создания, IE 10 дает следующую ошибку: 'Symbol' is undefined. Разве не следует полагать, что babel должен определить Symbol? Есть ли какая-либо конкретная конфигурация для webpack или babel мне нужно установить, чтобы заставить ее работать? Я использую {stage: 0} конфигурацию в моем .babelrc.

Любая помощь будет оценена, спасибо!

Ответы

Ответ 1

Хорошо, я в конце концов выяснилось, что babel в одиночку не делает polyfill. Включая скрипт <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script> решил эту проблему для меня.

Ответ 2

Вы можете потребовать полифонию в точке входа к вашему коду, чтобы он был связан с остальной частью JavaScript.

Один из вариантов - использовать:

require('babel-polyfill');

Или:

import 'babel-polyfill';

Все это объясняется в документации.

Ответ 3

в документации о времени выполнения

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

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

edit: еще лучше на герою в режиме prod используйте --save вместо --save -dev

Ответ 4

Хорошо, у меня была такая же проблема, но в моем случае это было совсем по-другому, поэтому в основном вам нужно включить скрипт в индексный файл, как показано ниже:

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

Но в моем случае я уже включил, что после некоторых исследований выяснилось, что мой прокси заблокировал скрипт...

Поэтому убедитесь, что вы включили его в index.html, а также убедитесь, что у вас есть доступ к скрипту, откуда вам нужно, чтобы избежать ошибки... лучший способ просто скопировать и вставить URL-адрес в браузере...

Но теперь, когда мы дошли до этого, это не говорит о самом Симбре, какой Символ, который не может быть распознан в IE?

Функция Symbol() возвращает значение символа типа, имеет статические свойства, которые выставляют несколько членов встроенных объектов, имеет статические методы, которые выставляют глобальный реестр символов и напоминают встроенный класс объектов, но неполны как конструктор, потому что он не поддерживает синтаксис "new Symbol()".

Каждое значение символа, возвращаемое из Symbol(), уникально. Значение символа может использоваться как идентификатор свойств объекта; это тип данных только для целей. Некоторые дополнительные пояснения о цели и использовании можно найти в записи глоссария для Symbol.

Символ типа данных является примитивным типом данных.

Ответ 5

Это решение будет работать точно, это сработало для меня, когда я столкнулся с ошибкой: "Символ" не определен в IE. Ранее он работал в Chrome и Firefox, но IE выбрасывал эту ошибку. Мне потребовалось несколько часов, чтобы найти это решение. Я использую последний Реакт, в это время реагирую "реагировать": "^ 16.5.0" на машине 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';

Проблема должна быть решена