I'm trying to lazy load Angular 2 modules with the router, and I'm having this error:
error_handler.js:50 EXCEPTION: Uncaught (in promise): Error: Cannot find module 'app/home/home.module'
I tried all the answers that seems to be working for the others, like this one which seems to be a solution for everybody facing this issue, but doesn't work with me Lazy loading in Angular2 RC7 and angular-cli webpack
here is my code:app.module
import { MediatorService } from './home/mediator.service';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import appRoutes from "./app.routes";
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
appRoutes
],
providers: [MediatorService],
bootstrap: [AppComponent]
})
export class AppModule { }
app.routes
import { RouterModule } from '@angular/router';
const routes = [
{path : '', loadChildren: './home/home.module#HomeModule'},
{path: 'devis', loadChildren: './forms/forms.module#FormsModule'}
];
export default RouterModule.forRoot(routes);
home.module
import {NgModule} from "@angular/core";
import {CommonModule} from "@angular/common";
import homeRoutes from "./home.routes";
@NgModule({
imports:[CommonModule, homeRoutes],
declarations: [HomeComponent]
})
export default class HomeModule{}
home.routes
import {RouterModule} from "@angular/router";
import {HomeComponent} from "./home.component";
const routes = [
{path: '', component: HomeComponent}
];
export default RouterModule.forChild(routes);
Package.json
{
"name": "insurance",
"version": "0.0.0",
"license": "MIT",
"angular-cli": {},
"scripts": {
"ng": "ng",
"start": "ng serve",
"lint": "tslint \"src/**/*.ts\"",
"test": "ng test",
"pree2e": "webdriver-manager update --standalone false --gecko false",
"e2e": "protractor"
},
"private": true,
"dependencies": {
"@angular/common": "^2.3.1",
"@angular/compiler": "^2.3.1",
"@angular/core": "^2.3.1",
"@angular/forms": "^2.3.1",
"@angular/http": "^2.3.1",
"@angular/platform-browser": "^2.3.1",
"@angular/platform-browser-dynamic": "^2.3.1",
"@angular/router": "^3.3.1",
"bootstrap": "^4.0.0-alpha.5",
"core-js": "^2.4.1",
"font-awesome": "^4.7.0",
"rxjs": "^5.0.1",
"ts-helpers": "^1.1.1",
"zone.js": "^0.7.2"
},
"devDependencies": {
"@angular/compiler-cli": "^2.3.1",
"@types/jasmine": "2.5.38",
"@types/jquery": "^2.0.34",
"@types/node": "^6.0.42",
"angular-cli": "1.0.0-beta.24",
"codelyzer": "~2.0.0-beta.1",
"jasmine-core": "2.5.2",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "~4.0.13",
"ts-node": "1.2.1",
"tslint": "^4.0.2",
"typescript": "~2.0.3"
}
}
UPDATE
I managed to make it work on plunker :
https://plnkr.co/edit/uLxmxDIeCdDzxbFjYQS7?p=preview
but still nothing on my machine !!!!
UPDATE
I installed a new virtual machine ubuntu 16.04 and the same problem !! could it be something about the modules versions, I mean those on package.json !! how to know what are the versions used in plunker ? cause it worked there !!!
I landed on this question with very similar symptoms and context, so it seems useful to remark that this answer to another question helped me out.
In my specific case, I was somewhat following the lazy feature modules docs, and I even faithfully tried to replicate the associated StackBlitz example code. For some reason that example gets away with:
And even though my Angular CLI (v6) based experiment had similar folder structure, I needed to do either this:
or this:
No clue why the StackBlitz example gets away with the first code example, but the other two both make sense and work for me when doing
ng serve
.As silly as it sounds, on Angular 6.
I was using this command
ng build --aot --watch
while developing my application. Somehow getting in to the zone I saved a lot of files (copy paste from some other projects). The build did work but was not showing errors but browser showed this error.I closed the build, & rebuilt it again & all the errors(unrelated to the above) which were not being shown showed up!!.
It seems that the angular-cli renderer has problems with lazy loading when you use
export default class SomeModule { }
...along with a few other nuances.This is what I did to resolve the same "Error: Cannot find module..." I was getting on Heroku deployment:
loadChildren: 'app/main/some-module/some-module.module#SomeModule'
export default class SomeModule { }
toexport class SomeModule { }
Angular CLI: 6.1.5 Node: 8.11.3 OS: win32 x64
Angular: 6.1.6
loadChildren: './customers/customers.module#CustomersModule' works for me but i had to restart server.
I managed to make it work, here is what I done :
1 - Make the routing code in the module ( not a file )
2 - Make the module file in the parent directory of the component
3 - Delete the 'default' in the export like this
export DEFAULT class HomeModule { }
became
export class HomeModule { }
you can see that it works with beta 24 here : https://github.com/mauricedb/lazy-routes
I don't know what is happening !!!