我可以通过在主应用程序中引用生成的NgModuleFactory文件来加载外部插件,但仍需要在主机应用程序中进行一些预编译的配置。
经过数小时的尝试不同的解决方案,我确定最适合我的用例的是在应用程序目录外部的文件夹中将插件作为打字稿文件提供,然后在准备开始提供服务时进行编译。
一个如何为我工作的示例-https: //github.com/savantly-net/sprout- platform/tree/development/web/sprout-web-ui
我使用一个简单的ts模块导入/导出插件-[在这里使用相对路径,但也可以使用绝对路径]https://github.com/savantly-net/sprout- platform/blob/development/web/发芽网络用户界面/sprout.conf.ts
import { WikiModule } from './plugins/wiki/';
export const plugins = [
WikiModule
]
然后使用传播运算符重新导出模块-https://github.com/savantly-net/sprout-platform/blob/development/web/sprout-web- ui/src/app/plugins/plugins.module。 ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { plugins } from '../../../sprout.conf';
import { MenuModule } from '@savantly/ngx-menu';
import { SecurityModule } from '@savantly/ngx-security';
import { SproutPluginModule } from '@savantly/ngx-sprout-plugin';
import { Observable } from 'rxjs/Observable';
const log = (msg: string, obj?: any) => {
console.log('[PluginsModule] ' + msg);
if (obj) {
console.log(obj);
}
}
@NgModule({
imports: [
CommonModule,
SproutPluginModule,
MenuModule,
SecurityModule,
...plugins
],
exports: [...plugins],
declarations: []
})
export class PluginsModule {
private ngModules: NgModule[] = [];
getNgModules(): Observable<NgModule[]> {
return Observable.of(this.ngModules);
}
constructor() {
log('Loaded plugins');
}
}