2

我有一个最初使用 Angular 6 开发的应用程序,并且已经在生产环境中运行了两年多。本周我开始使用 Angular 更新指南将其逐步更新到最新的稳定版本。

从 6 到 7 完美无缺,但试图从 7 到 8 一直很痛苦。跟随指南进展顺利;我唯一不需要包含在指南中的就是从ng4-loading-spinnerto移开ngx-loading-spinner。该应用程序可以毫无问题地编译和加载急切的模块,但所有延迟加载的模块(我可以在不登录的情况下导航到的模块)都会抛出“BrowserModule 已加载”异常。

我在这里找到了所有相关的问题和答案,关于只导入BrowserModule一次,甚至从我的应用程序模块中删除了一些可能已经导入BrowserModule的导入(包括ngx-loading-spinner)。

问题:

  1. 从 7 更新到 8 是否存在已知问题,我无法解决我的问题?
  2. 如果没有,我怎样才能找到罪魁祸首?

堆栈跟踪:

Error: BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.
    at new BrowserModule (platform-browser.js:4394)
    at _createClass (core.js:30461)
    at _createProviderInstance (core.js:30426)
    at initNgModule (core.js:30332)
    at new NgModuleRef_ (core.js:31561)
    at createNgModuleRef (core.js:31544)
    at Object.debugCreateNgModuleRef [as createNgModuleRef] (core.js:44911)
    at NgModuleFactory_.create (core.js:46088)
    at MapSubscriber.project (router.js:6383)
    at MapSubscriber._next (map.js:29)
    at resolvePromise (zone-evergreen.js:797)
    at resolvePromise (zone-evergreen.js:754)
    at zone-evergreen.js:858
    at ZoneDelegate.invokeTask (zone-evergreen.js:391)
    at Object.onInvokeTask (core.js:39680)
    at ZoneDelegate.invokeTask (zone-evergreen.js:390)
    at Zone.runTask (zone-evergreen.js:168)
    at drainMicroTaskQueue (zone-evergreen.js:559)
4

2 回答 2

2

答案:

  1. 我不认为这是一个已知问题,您无法解决它。

  2. 您可以通过调试它来追踪罪魁祸首,如下所示:

在此处输入图像描述

以下是步骤:

  • 重现错误

  • 在错误的地方放断点

  • 再次重现它

  • createNgModuleRef通过使用跳转到Call Stack

  • 检查moduleType值并直接跳转到那个 NgModule

  • BrowserModuleimports数组中查找

于 2020-07-24T03:31:11.300 回答
0

您是否更新了路由模块以使用新语法?

Angular 7 语法

loadChildren: 'path/your.module#YourModule'

变成 Angular 8 语法

loadChildren: () => import('path/your.module').then(m => m.YourModule)

于 2020-07-24T03:17:41.700 回答