From 06bbedb42429a7518829be5ace4256b8d4c184ea Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 6 Jul 2022 13:24:16 +0000 Subject: [PATCH] fix(@schematics/angular): prevent importing `RouterModule` parallel to `RoutingModule` Prior to this commit, we defined routes in two places example: ```ts @NgModule({ declarations: [ HomeComponent ], imports: [ CommonModule, RouterModule.forChild(routes), HomeRoutingModule ] }) export class HomeModule { } ``` Closes #17139 --- .../__name@dasherize__.module.ts.template | 4 +- .../schematics/angular/module/index_spec.ts | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/packages/schematics/angular/module/files/__name@dasherize@if-flat__/__name@dasherize__.module.ts.template b/packages/schematics/angular/module/files/__name@dasherize@if-flat__/__name@dasherize__.module.ts.template index 40c976127df0..252b9bb03397 100644 --- a/packages/schematics/angular/module/files/__name@dasherize@if-flat__/__name@dasherize__.module.ts.template +++ b/packages/schematics/angular/module/files/__name@dasherize@if-flat__/__name@dasherize__.module.ts.template @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core';<% if (commonModule) { %> import { CommonModule } from '@angular/common';<% } %><% if (lazyRouteWithoutRouteModule) { %> import { Routes, RouterModule } from '@angular/router';<% } %> -<% if (routing || lazyRouteWithRouteModule) { %> +<% if ((!lazyRoute && routing) || lazyRouteWithRouteModule) { %> import { <%= classify(name) %>RoutingModule } from './<%= dasherize(name) %>-routing.module';<% } %> <% if (lazyRouteWithoutRouteModule) { %> const routes: Routes = [ @@ -11,7 +11,7 @@ const routes: Routes = [ @NgModule({ declarations: [], imports: [<% if (commonModule) { %> - CommonModule<% } %><% if (routing || lazyRouteWithRouteModule) { %>, + CommonModule<% } %><% if ((!lazyRoute && routing) || lazyRouteWithRouteModule) { %>, <%= classify(name) %>RoutingModule<% } %><% if (lazyRouteWithoutRouteModule) { %>, RouterModule.forChild(routes)<% } %> ] diff --git a/packages/schematics/angular/module/index_spec.ts b/packages/schematics/angular/module/index_spec.ts index 11d80cb1fc87..3d759ab628de 100644 --- a/packages/schematics/angular/module/index_spec.ts +++ b/packages/schematics/angular/module/index_spec.ts @@ -288,5 +288,46 @@ describe('Module Schematic', () => { `loadChildren: () => import('../bar/bar.module').then(m => m.BarModule)`, ); }); + + it('should not add reference to RouterModule when referencing lazy routing module', async () => { + // Delete routing module + appTree.delete('/projects/bar/src/app/app-routing.module.ts'); + + // Update app.module to contain the route config. + appTree.overwrite( + 'projects/bar/src/app/app.module.ts', + ` + import { NgModule } from '@angular/core'; + import { RouterModule } from '@angular/router'; + import { BrowserModule } from '@angular/platform-browser'; + import { AppComponent } from './app.component'; + + + @NgModule({ + imports: [BrowserModule, RouterModule.forRoot([])], + declarations: [AppComponent], + }) + export class AppModule {} + `, + ); + + const tree = await schematicRunner + .runSchematicAsync( + 'module', + { + ...defaultOptions, + name: 'bar', + route: 'bar', + routing: true, + module: 'app.module.ts', + }, + appTree, + ) + .toPromise(); + + const content = tree.readContent('/projects/bar/src/app/bar/bar.module.ts'); + expect(content).toContain('RouterModule.forChild(routes)'); + expect(content).not.toContain('BarRoutingModule'); + }); }); });