Обновление Angular 8 устраняет ленивую загрузку модулей
У меня есть приложение, которое изначально было разработано с помощью Angular 6 и отлично работает в продакшене более двух лет. На этой неделе я начал постепенно обновлять его до последней стабильной версии с помощью руководств по обновлению Angular.
Переход с 6 на 7 прошел безупречно, но пытаться перейти с 7 на 8 было больно. Следование руководству прошло хорошо; единственное, что мне пришлось не включить в руководство, это отойти от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)
2 ответа
Ответы:
Я не думаю, что это известная проблема, решение которой ускользает от вас.
Вы можете отследить виновника, отладив его, как показано ниже:
Вот шаги:
воспроизвести ошибку
поставить точку останова на место ошибки
воспроизвести это снова
перейти к
createNgModuleRef
используяCall Stack
проверить
moduleType
value и переходите прямо к этому NgModuleнаходить
BrowserModule
вimports
массив
Вы обновили модули маршрутизации для использования нового синтаксиса?
Синтаксис Angular 7
loadChildren: 'path/your.module#YourModule'
становится синтаксисом Angular 8
loadChildren: () => import('path/your.module').then(m => m.YourModule)