Угловое 2+: IE 11 Невозможно получить вызов свойства неопределенной или нулевой ссылки

У меня проблема с Internet Explorer, что-то задыхается от Webpack. Я использую Angular-CLI 1.7.4 и Angular 5.2.10, текущие версии. Я получаю эту ошибку:

СЦЕНАРИЙ: 5007 Невозможно получить свойство 'call' неопределенного или нулевого ссылка. Inline bundle.js(55,12)

Это отличается от этой проблемы тем, что оно находится на другой строке в комплекте. Линия выглядит следующим образом:

/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

Я попытался изменить код веб-пакета в node_modules до console.log в moduleId, но по какой-то причине он не регистрируется.

Я нашел эту ветку, где многие люди занимаются этой проблемой. Я не могу понять, что имеет отношение к моей проблеме.

У меня нет циклических предупреждений о зависимостях от CLI.

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

ОБНОВЛЕНИЕ: Вот полифилы, которые у меня есть:

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/set';
import 'core-js/es6/reflect';
import 'core-js/es7/reflect';

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

ОБНОВЛЕНИЕ: Я нашел причину, по которой console.log не вызывался из Webpack. Это не обязательно в Webpack. Я искал в node_modules modules[moduleId].call(module.exports, module, module.exports, __webpack_require__) и обнаружил 87 случаев. Я предположил, что поскольку в нем говорилось "веб-пакет", что он был частью веб-пакета, то это было первое место, которое я посмотрел, место, где оно происходит, поэтому я остановился там, думая, что нашел его.

Кроме того, у меня снова возникла эта проблема, и я несколько раз перезагружал мой сервер Angular-CLI, но я не смог получить работающую компиляцию.

Это становится критически важным, поэтому я собираюсь поднять награду за этот вопрос.

ОБНОВЛЕНИЕ: похоже, IE задыхается от вызова (Function.prototype.call) метода, который добавляет полифиллы. Я захватил это из inline.bundle.js. Это одна из первых вещей, которая происходит:

function(module, exports, __webpack_require__) {

    module.exports = __webpack_require__("./src/polyfills.ts");

}

Ответы

Ответ 1

Эта ошибка возникает только при запуске ng serve и не возникает в производственной сборке, поэтому проблема не является критической и имеет обходной путь, как показано ниже:

Обходной путь. Когда это происходит, закройте браузер, перезапустите сервер разработки Angular-CLI и снова откройте браузер для своего приложения. (Вам не нужно очищать кэш или что-либо еще.)

Это иногда происходит в одной среде тестирования, а не в других.

В этой теме github.com/jakehockey10 говорится:

Эта проблема возникает только после перезагрузки Инструменты разработчика открыты. Нет проблем с Chrome и Firefox, но если у меня есть Инструменты разработчика открываются в IE11 и сохраняют изменения в моей машинописи, почти в 100% случаев я получаю эти ошибки при перезагрузке.

Кроме того, Angular 6 сейчас находится в полной версии и использует новую основную версию Webpack. Я еще не пробовал, но было бы полезно узнать, пытался ли кто-нибудь решить проблему путем обновления.

Ответ 2

Даже с включенными выше полиполками вы все равно можете использовать функцию, которая не поддерживается в IE. Вместо этого вы можете попробовать следующее:

 import 'core-js/shim';

Это будет включать в себя ВСЕ полиполки (которые в действительности не добавляют столько, чтобы ваш пакет). По крайней мере, это поможет устранить эту проблему.

Источник для справки: https://github.com/zloirock/core-js/blob/master/shim.js

Удачи!

Ответ 3

Если этот код работает в других браузерах, возможно, вы столкнулись с некоторыми проблемами реализации JS, специфичными для IE. В своем проекте откройте файл src/polyfills.ts. Он начинается с кучи прокомментированных строк с IE polyfills. Раскомментируйте их все и перестройте приложение. Если это поможет, попробуйте выяснить, какой конкретный полиполл решил вашу проблему и прокомментировать остальные.

Ответ 4

Временное решение. Поскольку проблема связана только с сервером Webpack dev, мы решили просто написать файлы с помощью ng build --watch и обслуживать их с помощью Lite-сервера для тестирования IE <= 11.