从构建中排除一些惰性模块(Angular5)

时间:2018-05-24 14:12:21

标签: angular typescript

我正在开展一个项目,该项目在多个客户中运行。有许多延迟加载的模块,其中大部分都被所有客户使用。但是有一些模块只在少数地方需要,所以我想将它们从其他地方的构建中排除。

有可能吗?

3 个答案:

答案 0 :(得分:1)

这样的事情怎么样: (然后可以使用if语句等加载不同的模块)

export class AppComponent implements AfterViewInit {

  @ViewChild('testOutlet', {read: ViewContainerRef}) testOutlet: ViewContainerRef;
  constructor(
    private loader: NgModuleFactoryLoader,
    private injector: Injector) {
    }

    ngAfterViewInit(): void {
    const path = 'src/app/lazy/lazy.module#LazyModule';
    this.loader.load(path).then((moduleFactory: NgModuleFactory<any>) => {
      const entryComponent = (<any>moduleFactory.moduleType).entry;
      const moduleRef = moduleFactory.create(this.injector);

      const compFactory = moduleRef.componentFactoryResolver.resolveComponentFactory(entryComponent);
      this.testOutlet.createComponent(compFactory);
  });
  }
}

答案 1 :(得分:0)

尝试将模块添加到exclude文件的tsconfig.app.json设置中

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
    "path/to/your/lazy.module.ts"
  ]
}

该路径必须相对于baseUrl设置

现在,我不确定您的设置如何(多应用cli项目?每个客户1个构建?),但只要每个构建都具有正确的配置文件,该设置就可以工作

答案 2 :(得分:0)

使用当前工具无法实现。 AOT编译器当前(最高V7)不支持路由的有条件加载。因此,CLI也不支持此功能。 您可以创建这样一种情况,即路由器防护将路由与用户隔离开来,但要进行构建,则必须存在这些路由。这是因为NGC需要静态分析路由器树。 有一些长期计划可能会在将来改变这种情况。

如果您想节省构建时间,可以将这些部件移入库中,但是您仍然需要一个小模块来延迟加载它们。 (出于相同的原因,您不能延迟加载库。) GitHub上与此相关的问题有两个。如果您想深入研究this,是个不错的选择,