Angular 7:ng serve 工作,但控制台显示 Zone.js 错误并且应用程序无法加载

Angular 7: ng serve works, but console shows a Zone.js error and app won't load

背景故事: 我昨天需要将我的应用程序从 Angular 5.2.9 更新到 6,所以我想 "why not go to 7 while I'm doing this." 所以当然花了一整天,并且需要对大量文件进行大量更改(主要是因为 Rxjs),但无论如何,到一天结束时,我能够做到 ng serve 并且编译没有错误!

但是当我转到 localhost:4200 到 运行 应用程序时,它在 "Loading..." 停止,并在 DevTools 控制台中显示以下消息:

core.js:14016 Uncaught (in promise) Error: In this configuration Angular requires Zone.js
    at new NgZone (core.js:14016)
    at getNgZone (core.js:14701)
    at PlatformRef.push../node_modules/@angular/core/fesm5/core.js.PlatformRef.bootstrapModuleFactory (core.js:14599)
    at core.js:14643

我已尝试确保我的所有软件包都是最新的。 npm install 给出了一些关于 fsevents 的错误,但是 zone 是最新的。

所以我现在不知所措。我不知道错误消息真正想告诉我什么,或者它是否合法。我做了 ng new 并检查了生成的文件,那里没有 "zone.js setup" 代码,所以我没有错过类似的东西。我觉得我已经非常接近让这个更新工作了,但当然,如果应用程序不会 运行,那就不好了! 谷歌搜索此错误消息并没有找到任何有用的信息(无论如何对我来说)。

将 package.json 中的每个依赖项更新为最新的

npm i -g npm-check-updates
ncu -u
npm install

即使您收到此错误,错误也会消失。转到 polyfill.ts 并添加或取消注释:-

/****************************************************************************
 * Zone JS is required by default for Angular itself. */
import 'zone.js/dist/zone';  // Included with Angular CLI.


/**********************************************************************

我的应用程序也发生了同样的事情,但在不同的上下文中,我在 django 应用程序中添加了 angular 构建文件,包含的脚本标签顺序不正确,所以虽然 运行 'python manage.py runserver',浏览器抛出类似“在此配置中 Angular 需要 Zone.js” 的错误。所以在尝试以下修复后它得到了修复:

首先顺序应该是

  • runtime.js
  • polyfills.js
  • main.js

因为 angular 生成 es5 和 es2015 构建文件,es5 构建文件的脚本标签必须包含 'nomodule defer' 作为属性,而 es2015 包含 'type="text/javascript"' .下面的屏幕截图来自我的 Django 应用程序的 'index.html',我在其中添加了 angular 构建文件。