Angular - 如何从 prod 构建中排除延迟加载的模块?

Web*_*x23 5 production angular-cli angular angular-cli-v7

我有一个用于演示目的的角度模块(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',
}
Run Code Online (Sandbox Code Playgroud)

我试图从 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/*"

  ]
}
Run Code Online (Sandbox Code Playgroud)

知道如何正确地做到这一点吗?

谢谢!

yur*_*zui 8

我认为您可以利用 CLI fileReplacements 功能,例如:

angular.json

"configurations": {
  "production": {
    "fileReplacements": [
      ...
      {
        "replace": "src/app/demo.routes.ts",
        "with": "src/app/demo.routes.prod.ts"
      }
    ],
Run Code Online (Sandbox Code Playgroud)

演示.routes.ts

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

export const demoRoutes: Routes = [
  {
    path: 'demo',
    loadChildren: './demo/demo.module#DemoModule'
  }
];
Run Code Online (Sandbox Code Playgroud)

演示.routes.prod.ts

export const demoRoutes = [];
Run Code Online (Sandbox Code Playgroud)

根路由器配置应如下所示:

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

RouterModule.forRoot([
  {
    path: '',
    component: HomeComponent
  },
  ...demoRoutes
])
Run Code Online (Sandbox Code Playgroud)

使用这种方法,cli 只会DemoModule在开发模式下捆绑。