Let's say you try to move some existing project to lazy loading modules using "loadChildren" property of your routes.
Here are few typical errors which you may get while moving legacy angular 2 project to lazy loading modules in routes:

1. You may get an error "Uncaught (in promise): ReferenceError: System is not defined" during the runtime of your angular4 app.

If you get this error then you most probably use This error most probably means that you did not add specific loader for your modules paths specified in router file.
To fix this you have to do firstly:
npm install angular2-router-loader --save-dev
And your webpack.config.js should contain at least these two loaders for typescript files:
{
    test: /.ts$/,
    loaders: [
        'awesome-typescript-loader',
        'angular2-router-loader'
    ],
    exclude: [/.(spec|e2e|e2e-obj).(ts|js)$/]
}
So extra loader has to be added to handle module loading in your case.

2. You get an error "Uncaught (in promise): Error: No NgModule metadata found for 'undefined'.".

This error most probably means that you did not specify a correct path to module in "loadChildren" property. Most probably in your case route config should look like:
{
    path: 'user/:id',
    loadChildren: './components/user/user.module#UserModule',
    canActivate: [ AuthAllGuard ]
}
And error appears because your version of route config looks like:
{
    path: 'user/:id',
    loadChildren: './components/user/user.module',
    canActivate: [ AuthAllGuard ]
}
So please add "#ModuleClassName" to the path of module in "loadChildren".

3. You get an error "Uncaught (in promise): 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.".

This error is straightforward. You should import "BrowserModule" only into the root moule of your application, so it has to be imported only once. In other modules you should use "CommonModule" instead.
So you should have:
import { CommonModule } from '@angular/common';
Instead of:
import { BrowserModule } from '@angular/platform-browser';
"CommonModule" has to be imported into all your modules becides root one.

4. You get an error "angeError: Maximum call stack size exceeded at RouterPreloader.processRoutes".

This error most probably means that you did not declare internal routes for lazy loaded module. So your lazy loaded module should contain internal routing configuration among other imports:
imports: [
    CommonModule,
    RouterModule.forChild([{
        path: '',
        component: UserPageComponent,
        children: UserRoutes
    }])
]