Angular 8 更新打破了模块的延迟加载

标签 angular angular8 angular-lazyloading

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

从 6 级迁移到 7 级进展顺利,但尝试从 7 级迁移到 8 级却很痛苦。继guide顺利;我唯一必须不包含在指南中的事情是从 ng4-loading-spinner 移至 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)

最佳答案

答案:

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

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

enter image description here

步骤如下:

  • 重现错误

  • 在错误处设置断点

  • 再次复制

  • 使用Call Stack跳转到createNgModuleRef

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

  • imports数组中查找BrowserModule

关于Angular 8 更新打破了模块的延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065740/

相关文章:

javascript - 如何在将值插入javascript中的数组时匹配键

javascript - Angular 8 组件更改和 ngOnInit 调用

javascript - Renderer2 错误 - id 与任何元素都不匹配

html - 需要背景颜色来填充空间

angular - 运行 ng serve 时出现 flex-layout 的问题

angular - ng-select 服务器端加载图标位置不正确

带有命名 socket 的 Angular 延迟加载不起作用

Angular 9 与 ui 路由器混合导致尝试在设置 AngularJS 注入(inject)器之前获取它。如何调试/修复?

angular - ERROR TypeError : You provided 'undefined' where a stream was expected. 您可以在 Angular 服务中提供 Observable、Promise、Array 或 Iterable