I'm building a webapp with Angular 4. I have a top-level routing module and a separate routing module for each submodule (e.g. HomeModule).
This is my top-level routing configuration:
export const ROUTES: Routes = [
{path: '', loadChildren: './home#HomeModule'},
{path: '**', component: NotFoundComponent},
];
When I run ng server
, I get a strange error, that module home
was not found. The app does not work in the browser.
The strange part is the following: When a file is changed and webpack recompiles the project, everything works just fine and the routing works.
The error does only appear when I'm running ng serve
.
This is the error I get when I'm running ng serve
, not when the project is recompiled because of a file change:
ERROR in Error: Could not resolve module ./home relative to /path/to/my/project/src/app/app.module.ts
at StaticSymbolResolver.getSymbolByModule (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:31884:30)
at StaticReflector.resolveExternalReference (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:30350:62)
at parseLazyRoute (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:28616:55)
at listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:28578:36)
at visitLazyRoute (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:29995:47)
at AotCompiler.listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:29963:20)
at AngularCompilerProgram.listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler-cli/src/transformers/program.js:157:30)
at Function.NgTools_InternalApi_NG_2.listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler-cli/src/ngtools_api.js:44:36)
at AngularCompilerPlugin._getLazyRoutesFromNgtools (/path/to/my/project/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:247:66)
at Promise.resolve.then.then (/path/to/my/project/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:538:50)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
Thanks in advance.
I was using the absolute path convention: app/home#HomeModule
and it wasn't working.
I then tried the relative path convention: ./home#HomeModule
and it worked.
... in the CLI, the paths to lazy routes should be relative from the file you're in
Source
I followed this Tutorial and it used the absolute path convention and it worked.
Would love to know why the inconsistency...
UPDATE:
As Friedrich mentioned, to make it work using an Absolute Path, update src/tsconfig.app.json
as follows:
{
...,
"compilerOptions": {
...,
baseUrl: "./"
}
}
I had the same issue and none of the answers above worked for me,the final solution i found was using the absolute path of the module and module class name after the '#'.
export const ROUTES: Routes = [
{path: '', loadChildren: 'src/app/pathToYourModule/home.module#HomeModule'},
{path: '**', component: NotFoundComponent}
];
I started the path from 'src' and dont forget to remove the '.ts' from the module path.
You have to remove the .ts suffix from the reference to your module file: {path: '', loadChildren: 'app/pathToYourModule/home.module#HomeModule'},
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With