Javascript 将带有ES6模块的插件注册到网页包中

Javascript 将带有ES6模块的插件注册到网页包中,javascript,typescript,webpack,es6-modules,webpack-2,Javascript,Typescript,Webpack,Es6 Modules,Webpack 2,因此,目前我有一个SPA,它包括基于可(由用户)安装的“插件”的不同功能。这个应用程序目前主要是TypeScript,输出的JS文件(es5语法,没有加载程序)只是通过脚本标签包含在SPA登录页中。这已经足够好了,但是现在脚本的数量对于某些用户来说是很大的,所以我计划对插件进行webpack(TS->ES6->Babel->webpack Bundle),但是我可以看到一种方法来轻松地只加载某些代码或加载某些用户 所以主app.ts看起来像这样 module MyApp { export c

因此,目前我有一个SPA,它包括基于可(由用户)安装的“插件”的不同功能。这个应用程序目前主要是TypeScript,输出的JS文件(es5语法,没有加载程序)只是通过脚本标签包含在SPA登录页中。这已经足够好了,但是现在脚本的数量对于某些用户来说是很大的,所以我计划对插件进行webpack(TS->ES6->Babel->webpack Bundle),但是我可以看到一种方法来轻松地只加载某些代码或加载某些用户

所以主app.ts看起来像这样

module MyApp {
  export class App() {
  }

  export Plugins {
    export class PageEditor extends Plugin { ... }
  }
}
window['MyApp'] = MyApp;
module MyApp {
  export Plugins {
    export class TicketManager extends Plugin { ... }
  }
}
然后说TicketPlugin.ts看起来像这样

module MyApp {
  export class App() {
  }

  export Plugins {
    export class PageEditor extends Plugin { ... }
  }
}
window['MyApp'] = MyApp;
module MyApp {
  export Plugins {
    export class TicketManager extends Plugin { ... }
  }
}
现在要生成菜单,我只需执行以下操作:

var MenuItems = Object.keys(MyApp.Plugins).map(p=>MyApp.Plugins[p].menuItem());
现在我遇到的主要问题

恢复功能的明显方法是将每个插件作为入口点,然后为每个需要的插件添加一个脚本标记(但这与我现在的情况相比没有任何改进)

理想情况下,我希望打包插件,将它们输出到单独的文件中,然后服务器可以根据当前用户需要的插件将它们连接到捆绑包中。但是,我看不到一种让这些文件运行以注册自己的方法,无论是使用另一个类/组件还是作为全局文件

我见过webpack处理jQuery插件的方式,但在对应用程序进行webpack之前,您必须知道您计划加载哪些jQuery插件,并且需要它们