Angular 2+: IE 11 无法获取 属性 'call' 未定义或空引用
Angular 2+: IE 11 Unable to get property 'call' of undefined or null reference
我遇到了 Internet Explorer 因 Webpack 的某些内容而窒息的问题。我正在使用 Angular-CLI 1.7.4 和 Angular 5.2.10,当前版本。我收到此错误:
SCRIPT:5007 Unable to get property 'call' of undefined or null
reference. Inline bundle.js (55,12)
这与 不同,因为它在包中位于不同的行。该行看起来像这样:
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
我尝试将 node_modules
中的 webpack 代码修改为 console.log
moduleId
,但由于某种原因它没有记录。
我发现this thread,那里有很多人在处理这个问题。我看不到与我的问题相关的内容。
我没有收到来自 CLI 的任何循环依赖警告。
我已经将我的代码恢复到几个不同的以前版本,重新安装了节点模块,但我仍然遇到同样的错误。真是奇怪。
更新:这是我的 polyfill:
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';
我也找到了this issue,说明很多人都遇到这个问题,而且提供的解决方案都不行。
更新:我找到了 console.log 没有被 Webpack 调用的原因。它不一定是 in Webpack。我在 node_modules
中搜索 modules[moduleId].call(module.exports, module, module.exports, __webpack_require__)
,发现出现了 87 次。我假设因为它说 'webpack' 它是 webpack 的一部分,所以这是我首先看的地方,这是它 确实 发生的地方,所以我停在那里我以为我找到了。
此外,我又遇到了这个问题,并多次重启了我的 Angular-CLI 服务器,但我无法获得正在运行的编译。
这个问题变得很关键,所以我将悬赏这个问题。
更新:看起来 IE 在调用添加 polyfill 的方法 (Function.prototype.call
) 时卡住了。我从 inline.bundle.js 中捕获了这个。这是最先发生的事情之一:
function(module, exports, __webpack_require__) {
module.exports = __webpack_require__("./src/polyfills.ts");
}
如果此代码在其他浏览器中有效,您可能 运行 遇到某些特定于 IE 的 JS 实现问题。在您的项目中,打开文件 src/polyfills.ts。它以一堆带有 IE polyfill 的注释行开始。取消所有注释并重建应用程序。如果这有帮助,请尝试找出哪个特定的 polyfill 解决了您的问题并注释掉其余部分。
即使包含上述 polyfill,您可能仍在使用 IE 不支持的功能。相反,你可以试试这个:
import 'core-js/shim';
这将包括所有的 polyfill(实际上并没有给你的包添加那么多)。至少,这将有助于消除 polyfill 的问题。
参考来源:
https://github.com/zloirock/core-js/blob/master/shim.js
祝你好运!
解决方法:由于问题仅与 Webpack 开发服务器有关,我们选择仅使用 ng build --watch
和 serve them with lite-server 编写文件以测试 IE <= 11。
这个错误只会在运行 ng serve
时出现,在生产版本中不会出现,所以问题不严重,有解决方法,如下:
解决方法:发生这种情况时,关闭浏览器,重新启动 Angular-CLI 开发服务器,然后重新打开浏览器以访问您的应用程序。(您不需要清除缓存,或其他任何东西。)
这有时会发生在一个测试环境中,而不是其他环境中。
根据 this thread、github.com/jakehockey10 说:
I'm having this issue only after a live-reload occurs with the
Developer Tools open. No issue with Chrome and Firefox, but if I have
the Developer Tools open in IE11 and save a change to my typescript,
nearly 100% of the time, I get these errors upon reload.
此外,Angular 6 现已全面发布,并使用了新的主要版本的 Webpack。我还没有尝试过,但很高兴知道是否有人尝试通过升级来解决问题。
我遇到了 Internet Explorer 因 Webpack 的某些内容而窒息的问题。我正在使用 Angular-CLI 1.7.4 和 Angular 5.2.10,当前版本。我收到此错误:
SCRIPT:5007 Unable to get property 'call' of undefined or null reference. Inline bundle.js (55,12)
这与
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
我尝试将 node_modules
中的 webpack 代码修改为 console.log
moduleId
,但由于某种原因它没有记录。
我发现this thread,那里有很多人在处理这个问题。我看不到与我的问题相关的内容。
我没有收到来自 CLI 的任何循环依赖警告。
我已经将我的代码恢复到几个不同的以前版本,重新安装了节点模块,但我仍然遇到同样的错误。真是奇怪。
更新:这是我的 polyfill:
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';
我也找到了this issue,说明很多人都遇到这个问题,而且提供的解决方案都不行。
更新:我找到了 console.log 没有被 Webpack 调用的原因。它不一定是 in Webpack。我在 node_modules
中搜索 modules[moduleId].call(module.exports, module, module.exports, __webpack_require__)
,发现出现了 87 次。我假设因为它说 'webpack' 它是 webpack 的一部分,所以这是我首先看的地方,这是它 确实 发生的地方,所以我停在那里我以为我找到了。
此外,我又遇到了这个问题,并多次重启了我的 Angular-CLI 服务器,但我无法获得正在运行的编译。
这个问题变得很关键,所以我将悬赏这个问题。
更新:看起来 IE 在调用添加 polyfill 的方法 (Function.prototype.call
) 时卡住了。我从 inline.bundle.js 中捕获了这个。这是最先发生的事情之一:
function(module, exports, __webpack_require__) {
module.exports = __webpack_require__("./src/polyfills.ts");
}
如果此代码在其他浏览器中有效,您可能 运行 遇到某些特定于 IE 的 JS 实现问题。在您的项目中,打开文件 src/polyfills.ts。它以一堆带有 IE polyfill 的注释行开始。取消所有注释并重建应用程序。如果这有帮助,请尝试找出哪个特定的 polyfill 解决了您的问题并注释掉其余部分。
即使包含上述 polyfill,您可能仍在使用 IE 不支持的功能。相反,你可以试试这个:
import 'core-js/shim';
这将包括所有的 polyfill(实际上并没有给你的包添加那么多)。至少,这将有助于消除 polyfill 的问题。
参考来源: https://github.com/zloirock/core-js/blob/master/shim.js
祝你好运!
解决方法:由于问题仅与 Webpack 开发服务器有关,我们选择仅使用 ng build --watch
和 serve them with lite-server 编写文件以测试 IE <= 11。
这个错误只会在运行 ng serve
时出现,在生产版本中不会出现,所以问题不严重,有解决方法,如下:
解决方法:发生这种情况时,关闭浏览器,重新启动 Angular-CLI 开发服务器,然后重新打开浏览器以访问您的应用程序。(您不需要清除缓存,或其他任何东西。)
这有时会发生在一个测试环境中,而不是其他环境中。
根据 this thread、github.com/jakehockey10 说:
I'm having this issue only after a live-reload occurs with the Developer Tools open. No issue with Chrome and Firefox, but if I have the Developer Tools open in IE11 and save a change to my typescript, nearly 100% of the time, I get these errors upon reload.
此外,Angular 6 现已全面发布,并使用了新的主要版本的 Webpack。我还没有尝试过,但很高兴知道是否有人尝试通过升级来解决问题。