我正在开展一个项目,该项目在多个客户中运行。有许多延迟加载的模块,其中大部分都被所有客户使用。但是有一些模块只在少数地方需要,所以我想将它们从其他地方的构建中排除。
有可能吗?
答案 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,是个不错的选择,