Angular - Как исключить ленивый загруженный модуль из сборки prod? - PullRequest
2 голосов
/ 09 мая 2019

У меня есть угловой модуль для демонстрационных целей (DevShowcaseModule).Этот модуль не должен быть включен в производственную сборку.Чтобы скрыть эти демонстрации от конечных пользователей и предотвратить ошибки демонстрационного кода в рабочей среде.

Среда:

  • Угловая версия: 7.2.5
  • Угловой CLI:7.3.2

Это мой app-routing.module.ts

{
    path: APP_NAV_ITEMS.DEV_SHOWCASE,
    canActivate: [ AuthGuard ],
    loadChildren: './_dev-showcase/dev-showcase.module#DevShowcaseModule',
}

Я пытался исключить папку модуля из tsconfig.json.Но это не работает, я все еще могу вызвать маршрут, и демонстрационный модуль загружен.

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "importHelpers": true,
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,

    "noUnusedLocals": true,
    "noUnusedParameters": true,

    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "exclude": [
    "app/_dev-showcase/*"

  ]
}

Есть идеи, как это сделать правильно?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Я думаю, вы можете использовать функцию CLI fileReplacements, такую ​​как:

angular.json

"configurations": {
  "production": {
    "fileReplacements": [
      ...
      {
        "replace": "src/app/demo.routes.ts",
        "with": "src/app/demo.routes.prod.ts"
      }
    ],

demo.routes.ts

import { Routes } from '@angular/router';

export const demoRoutes: Routes = [
  {
    path: 'demo',
    loadChildren: './demo/demo.module#DemoModule'
  }
];

demo.routes.prod.ts

export const demoRoutes = [];

Конфигурация корневого маршрутизатора должна выглядеть следующим образом:

import { demoRoutes } from './demo.routes';

RouterModule.forRoot([
  {
    path: '',
    component: HomeComponent
  },
  ...demoRoutes
])

При использовании этого методаCli будет связывать DemoModule только в режиме разработки.

0 голосов
/ 10 мая 2019

Это еще одно возможное решение. Режим PROD работает нормально.
Единственный недостаток - DemoModule не загружается после ng serve. Для запуска компилятора требуется изменение кода, после чего загружается DemoModule.

Есть ли возможность загрузить загруженный демо-модуль без изменения кода?

if(!environment.production) {
    console.log('Application is running in dev mode');
    routes.unshift(
        {
            path: APP_NAV_ITEMS.DEV_SHOWCASE,
            canActivate: [ AuthGuard ],
            loadChildren: './_demo/demo.module#DemoModule',
        },
    )
}else{
    console.log('Application is running in production mode');
}

@NgModule({
    imports: [ RouterModule.forRoot(routes, { useHash: true }) ],
    exports: [ RouterModule ]
})
export class AppRoutingModule {
}
...