在捆绑包

时间:2016-09-20 14:39:21

标签: webpack systemjs jspm

我正在使用JSPM + SystemJS来管理依赖项并捆绑我的项目。

上下文(TL; DR)

我有分布式架构,其中初始化时的单个页面应用程序使用System.import加载其他外部资源,让我们将这些资源称为“小部件”。这些小部件是独立的,可以在多个单页面应用程序之间共享。所有这些应用程序和小部件都有自己独立的开发/部署生命周期。

Single page application and widget relationship

SPA和小部件都与它们自己的库依赖项捆绑在一起,但有一些例外需要是完全相同的实例,因为它们需要是单例。例如,当存在多个实例时,React不喜欢它,或者PostalJS(内存事件总线)只能在同一个实例中发送事件。

Event bus communicating with multiple components

SystemJS映射到具有特定版本号的特定库,并且已编译的包具有编译到其内部库引用中的版本号。

这本身不是问题,实际上是一个很好的设计决策,特别是对我来说,因为我希望在同一个应用程序上下文中共存多个bundle,并且他们可能会使用相同库的冲突版本。但是当我需要共享依赖项的实例时,它确实成为一个问题,因为即使是补丁更新也需要我升级并重新部署所有应用程序和小部件。

实际问题

问题在于是否有一个很好的解决方案来处理跨独立SystemJS包的共享依赖项。

理想情况下,我希望SPA能够规定依赖项的版本以及"小部件"使用已提供给他们的版本。我设法让SystemJS在SPA中公开作为Global的依赖项。

SystemJS.config({
   meta: {
     "https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react.js": {
        "exports": "React",
        "format": "global"
     }
  },
  ...
})

但我还没想出如何在窗口小部件中将Global变量映射回SystemJS。

如果你有它们,我愿意接受其他建议。

0 个答案:

没有答案