Ответ 1
перезагрузка ng serve
работала для меня
Я пытался найти какое-либо решение для этой ошибки, но ничего не работает для меня. У меня есть простое приложение Angular2, созданное с помощью Angular -CLI. Когда я обслуживаю это приложение в браузере, я получаю эту ошибку: EXCEPTION: Uncaught (in promise): Error: Cannot find module '/app/test.module'.
Я пытался использовать другой путь в loadChildren:
'/app/test.module'
'./app/test.module'
'./test.module'
'/src/app/test.module'
Папки
src/
app/
app-routing.module.ts
app.component.ts
app.module.ts
test.component.ts
test.module.ts
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { RoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
RoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
приложение-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', loadChildren: '/app/test.module' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: []
})
export class RoutingModule { }
test.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { TestComponent } from './test.component';
export const routes: Routes = [
{ path: '', component: TestComponent }
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(routes)
],
exports: [TestComponent],
declarations: [TestComponent]
})
export default class TestModule { }
трассировка стека
error_handler.js:45EXCEPTION: Uncaught (in promise): Error: Cannot find module '/app/test.module'.ErrorHandler.handleError @ error_handler.js:45next @ application_ref.js:273schedulerFn @ async.js:82SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:74onError @ ng_zone.js:120onHandleError @ ng_zone_impl.js:64ZoneDelegate.handleError @ zone.js:207Zone.runGuarded @ zone.js:113_loop_1 @ zone.js:379drainMicroTaskQueue @ zone.js:386
2016-10-08 14:22:50.612 error_handler.js:50ORIGINAL STACKTRACE:ErrorHandler.handleError @ error_handler.js:50next @ application_ref.js:273schedulerFn @ async.js:82SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:74onError @ ng_zone.js:120onHandleError @ ng_zone_impl.js:64ZoneDelegate.handleError @ zone.js:207Zone.runGuarded @ zone.js:113_loop_1 @ zone.js:379drainMicroTaskQueue @ zone.js:386
2016-10-08 14:22:50.613 error_handler.js:51Error: Uncaught (in promise): Error: Cannot find module '/app/test.module'.
at resolvePromise (zone.js:429)
at zone.js:406
at ZoneDelegate.invoke (zone.js:203)
at Object.onInvoke (ng_zone_impl.js:43)
at ZoneDelegate.invoke (zone.js:202)
at Zone.run (zone.js:96)
at zone.js:462
at ZoneDelegate.invokeTask (zone.js:236)
at Object.onInvokeTask (ng_zone_impl.js:34)
at ZoneDelegate.invokeTask (zone.js:235)ErrorHandler.handleError @ error_handler.js:51next @ application_ref.js:273schedulerFn @ async.js:82SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:74onError @ ng_zone.js:120onHandleError @ ng_zone_impl.js:64ZoneDelegate.handleError @ zone.js:207Zone.runGuarded @ zone.js:113_loop_1 @ zone.js:379drainMicroTaskQueue @ zone.js:386
2016-10-08 14:22:50.614 zone.js:355Unhandled Promise rejection: Cannot find module '/app/test.module'. ; Zone: angular ; Task: Promise.then ; Value: Error: Cannot find module '/app/test.module'.(…) Error: Cannot find module '/app/test.module'.
at webpackEmptyContext (http://localhost:4200/main.bundle.js:49550:8)
at SystemJsNgModuleLoader.loadAndCompile (http://localhost:4200/main.bundle.js:57952:40)
at SystemJsNgModuleLoader.load (http://localhost:4200/main.bundle.js:57945:60)
at RouterConfigLoader.loadModuleFactory (http://localhost:4200/main.bundle.js:22354:128)
at RouterConfigLoader.load (http://localhost:4200/main.bundle.js:22346:81)
at MergeMapSubscriber.project (http://localhost:4200/main.bundle.js:61105:111)
at MergeMapSubscriber._tryNext (http://localhost:4200/main.bundle.js:32515:27)
at MergeMapSubscriber._next (http://localhost:4200/main.bundle.js:32505:18)
at MergeMapSubscriber.Subscriber.next (http://localhost:4200/main.bundle.js:7085:18)
at ScalarObservable._subscribe (http://localhost:4200/main.bundle.js:48555:24)consoleError @ zone.js:355_loop_1 @ zone.js:382drainMicroTaskQueue @ zone.js:386
2016-10-08 14:22:50.620 zone.js:357Error: Uncaught (in promise): Error: Cannot find module '/app/test.module'.(…)consoleError @ zone.js:357_loop_1 @ zone.js:382drainMicroTaskQueue @ zone.js:386
перезагрузка ng serve
работала для меня
Я столкнулся с этой же проблемой. Я решил это, выполнив следующие две вещи:
В конфигурации маршрутизации корневого модуля используйте loadChildren
с относительным путем к ленивому загруженному модулю angular. Строка разделяется символом #, где правая часть split - это имя класса с ленивым загруженным модулем.
Я добавил./как префикс строки loadChildren
.
{ path:'user', loadChildren:'./app/user/user.module#UserModule'}
Я использую webpack 2 и ему нужен загрузчик для angular 2, который позволяет загружать модули на основе строк с помощью маршрутизатора angular. Добавьте это в проект
yarn add angular-router-loader -D
затем добавьте загрузчики angular-router-loader
в typescript
loaders: [
{
test: /\.ts$/,
loaders: [
'awesome-typescript-loader',
'angular-router-loader'
]
}
]
и его работа для меня.
Я столкнулся с подобной проблемой при работе с Angular 4.4.5 и веб-пакетом и сумел исправить ее без использования строк, но со ссылкой на тип модуля (намного легче написать и меньше подвержен ошибкам):
const routes: Routes = [
{ path: '', loadChildren: () => TestModule }
];
Я не смог найти минимальную версию для Angular (загрузчик), поддерживающую этот синтаксис.
Способ, который мог бы работать с AOT, состоит в том, чтобы заменить лямбда-синтаксис обычным:
export function getTestModule() { return TestModule; }
const routes: Routes = [
{ path: '', loadChildren: getTestModule }
];
Также проверьте эту проблему (спасибо rey_coder
).
Наконец, я узнал, что мне нужно импортировать ленивый загруженный модуль в конфигурацию маршрутизации следующим образом:
const routes: Routes = [
{ path: '', loadChildren: 'app/test.module' }
];
без каких-либо /
или ./
перед пути к модулю.
Это сработало для меня, используя.
../app/
Я решил эту проблему, используя всплывающее подсказку в VS-коде. Вы также можете следовать этому. Не нужно никуда идти. (Думаю, путь может варьироваться в каждом проекте.)
Я искал эту проблему за пару часов в проекте, с которого я только что перешел. Ни одно из вышеперечисленных решений не работало, но потом я понял, что все ленивые модули имеют расширение.ts.
Если у кого-то еще есть проблемы, проверьте, нужно ли вам изменять loadChildren: 'app/example.module.ts'
для loadChildren: 'app/example.module'
.
обязательно включите импортировать {Маршруты, RouterModule} из '@angular/router'; в модуле для загрузки lalely
Я решил свою проблему. Не помещайте .ts
в имя пути. Вместо использования 'path/to/my/module.ts#MyModuleClass'
используйте 'path/to/my/module#MyModuleClass'
В сценарии использования сценария для выделения отдельной функции (например, test.module.ts) из ее корневого приложения (например, app.module.ts) через лениво загружаемый модуль мы можем создать тестовый модуль и его компоненты в подпапке (например, src/app/test/). Метод test-routing.module можно настроить следующим образом:
//test-routing.module.ts
//routes to test.component.ts as an example
import { Routes, RouterModule } from '@angular/router';
import { TestComponent } from './test.component';
const feature_test_routes: Routes = [
{
path: '',
component: TestComponent
}
];
export const TestRoutingModule = RouterModule.forChild(feature_test_routes);
У родительского модуля (app-routing.module.ts) будет такой маршрут, который выглядит следующим образом:
//app-routing.module.ts
//routes to http://localhost:4200/test
import { Routes, RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
const root_routes: Routes = [
{
path: '',
component: AppComponent,
children: [
{
path: 'test',
loadChildren: './test/test.module#TestModule'
}
]
}
];
export const AppRoutingModule = RouterModule.forChild(root_routes);
Это позволяет корневому приложению и компоненту входа, по необходимости, загружать функции lazy-load из test.module.ts в качестве дочернего, когда это необходимо.
Я меняю этот
{
path: 'test',
loadChildren: 'app/tests/test.module#TestModule'
}
для этого
{
path: 'test', loadChildren: () => new Promise(resolve => {
(require as any).ensure([], require => {
resolve(require('app/tests/test.module').TestModule);
})
})
},
И решил мою проблему.
Вам нужно изменить
export default class TestModule { }
к
export class TestModule { }
Это должно решить ваши проблемы.
У меня была аналогичная проблема. Я только что перезапустил сервер, и он сработал. :)