Угловое 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.