您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我们可以在AOT之后将功能模块添加到Angular应用中吗

我们可以在AOT之后将功能模块添加到Angular应用中吗

我可以通过在主应用程序中引用生成的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');
  }
}

这不是真正的即插即用解决方案,但是如果没有在[预编译]配置文件中明确引用插件文件夹,则构建过程将无法执行摇树。

其他 2022/1/1 18:13:57 有680人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶