【发布时间】:2017-07-06 08:26:40
【问题描述】:
基本上我想创建一个动态插件系统。我需要能够部署新插件,而不必重新部署主插件系统。
基本上,如果我要使用 SystemJS,我可以做类似的事情
System.import(url).then(plugin => {
this.createComponent(plugin.default);
});
url 是动态的东西 - 可以从数据库或配置等中读取。
上面可以工作 - 除了我使用使用 Webpack 的 Angular CLI。使用 CLI 是对整个项目的简单选择 - 所以我坚持使用 Webpack 和 CLI。
由于 Angular CLI 做了很多抽象,我不能修改 webpack 配置(我可以,但是我必须手动维护它,这又会破坏简单性)。
Webpack 不是一个模块加载,而是一个打包器——这意味着它应该事先知道这些模块,我不能只是将一个新模块放到某个地方并更新配置以使其动态加载。
我的选择是什么?
编辑:Webpack 有自己的 System.import,但它会检查 url 是静态的还是动态的。我可以忍受传递一个静态文件夹并不得不将插件放入该文件夹 - 这似乎在应用程序本身内部之外的任何地方都不起作用。
【问题讨论】:
-
一年前开始时有同样的要求。除了使用 systemjs 而不是使用 angular-cli 之外别无选择。从那以后我没有看到任何可以让 cli 更“动态”地工作的东西,但我想知道是否有。
-
Webpack 不是一个模块加载,而是一个打包器 - 完全正确,所以 Webpack 和 SystemJS 之间应该没有选择,两者都用。它们是用于不同任务的不同工具。我正在开发基于插件的系统,现在两者都使用
-
@Maximus 是的,但有点担心 SystemJS 会过分杀伤力——我还需要以某种方式破解它以覆盖 webpacks System.import。这让我有些恼火……
-
@Maximus 动态加载组件时
entryComponents怎么处理? -
@SystemJS 遵循dynamic modules loading 的提议,因此随着时间的推移,它应该可以在浏览器中使用。此外,Here is what you need to know about dynamic components in Angular 的文章可能会帮助您完成您的旅程
标签: angular angular-cli