Я пытаюсь запустить образец веб-приложения, чтобы узнать, как работает ленивая загрузка с помощью модулей Angular. Я создал приложение через angular-cli 1.0.0-beta.24, который использует угловой 2.4.1. Я создал основное приложение, а затем 3 компонента. Затем я добавил маршрутизацию на уровне приложения и напрямую ссылаюсь на первые два компонента, импортируя компоненты в модуль приложения. Для третьего компонента я просто добавил маршрутизацию, используя метод loadChildren, указанный в Angular routing docs. Моя конфигурация маршрутизации для основного приложения выглядит следующим образом:angular-cli router lazy loading
const appRoutes: Routes = [
{ path: 'comp1', component: Comp1Component},
{ path: 'comp2', component: Comp2Component},
{ path: 'comp3', loadChildren: 'app/comp3/comp3.module'}
];
export default RouterModule.forRoot(appRoutes);
Я повернул код для третьего компонента в модуль и удалить весь импорт из приложения к третьему компоненту. Конфигурации маршрутизации для модуля выглядит следующим образом:
const routes: Routes = [
{path: '', component:Comp3Component}
];
export default RouterModule.forChild(routes);
Когда я запустить приложение, маршруты для COMP1 и comp2 работать нормально, когда я нажимаю ссылку для Comp3 (модуль маршрутизации), я получаю следующее ошибка зарегистрирована на консоли:
EXCEPTION: Uncaught (in promise): Error: Cannot find module ./comp3/comp3.module'.
Error: Cannot find module './comp3/comp3.module'.
at webpackEmptyContext (http://localhost:4200/main.bundle.js:77:8) [angular]
Кажется, что веб-пакет не обрабатывает ленивую загрузку. Я пробовал все виды вариантов пробега вызова «loadChildren» в том числе:
loadChildren: 'app/comp3/comp3.module#Comp3Module'
без изменений в поведении (все еще получаю ошибку выше). Новым для angular2 может быть что-то в моем коде, но я вижу, что другие получают ту же ошибку. Мой google/stackoverflow foo не привел меня к решению. Я добавил свой sample app to my Github account here.
I saw this issue logged by another developer with the Angular team but they kicked it as a support issue to StackOverflow because the sample worked on plunkr. Я уверен, что где-то там есть ключ, но я действительно недостаточно знаю о веб-пакете и о том, что он делает, чтобы найти различия в выполнении plunkr и ng.
Добавление дополнительной информации. Шаблон HTML для приложения выглядит следующим образом (also available on github repo):
<h1>
{{title}}
</h1>
<ul>
<li><a class="nav-link" routerLink="/comp1" routerLinkActive="active">Component 1</a></li>
<li><a class="nav-link" routerLink="/comp2" routerLinkActive="active">Component 2</a></li>
<li><a class="nav-link" routerLink="/comp3" routerLinkActive="active">Component 3</a></li>
</ul>
<p></p>
<router-outlet></router-outlet>
Я скопировал мой дерево исходников для этого приложения (от SRC/приложения на вниз) к angular2 seed project, и с некоторыми незначительными ожидается tweeks, он прекрасно работает там и продолжает сбой в среде, созданной угловым кли. Единственным изменением, которое я внес в свой источник TS, является использование относительного пути:
{ path: 'comp3', loadChildren: './comp3/comp3.module#Comp3Module'}
для загрузки вызова для детей. Я изменил код примера Github, чтобы отразить это обновление, но он все еще не работает в среде angular-cli.
Это решило. Третий компонент загружается и отображается в источнике webpack. Спасибо. –
Из интереса вы получаете дополнительный файл сборки с этим подходом? Я использую Lazy Loaded детские маршруты, а при создании для prod и AOT я только когда-либо получаю стандартные 4 пакета - он никогда не прерывает его дальше ... Я не могу сказать, нормально это или нет – Rodney
Большое вам спасибо, это работает для меня –