我有一个最初使用 Angular 6 开发的应用程序,并且已经在生产中正常运行了两年多。本周,我开始使用 Angular 更新指南逐步将其更新到最新的稳定版本。
从 6 级迁移到 7 级进展顺利,但尝试从 7 级迁移到 8 级却很痛苦。继guide顺利;我唯一必须不包含在指南中的事情是从 ng4-loading-spinner 移至 ngx-loading-spinner 。该应用程序编译并加载急切的模块没有问题,但所有延迟加载的模块(我可以在不登录的情况下导航到的模块)都会抛出“BrowserModule 已加载”异常。
我在这里找到了有关仅导入一次 BrowserModule
的所有相关问题和答案,甚至从我的应用模块中删除了一些可能已导入 BrowserModule
的导入内容以及(包括 ngx-loading-spinner
)。
问题:
- 从 7 更新到 8 是否存在一个我无法解决的已知问题?
- 如果不是,我怎样才能找到罪魁祸首?
堆栈跟踪:
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)
最佳答案
答案:
我不认为这是一个您无法解决的已知问题。
您可以通过如下调试来追踪罪魁祸首:
步骤如下:
重现错误
在错误处设置断点
再次复制
使用
Call Stack
跳转到createNgModuleRef
检查
moduleType
值并直接跳转到该NgModule在
imports
数组中查找BrowserModule
关于Angular 8 更新打破了模块的延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065740/