【问题标题】:Isolate WebComponent JS libraries隔离 WebComponent JS 库
【发布时间】:2018-11-03 00:32:21
【问题描述】:

我们有主要的大型应用程序,将使用不同的库(Angular、React 等)创建单独的小型应用程序(微服务),并将它们编译成 web 组件以在任何地方使用它们。主应用程序有一些库(例如 underscore.js),我们的一些组件使用相同的库(例如 lodash.js),在这种情况下,我们在主应用程序中使用 web 组件时会看到很多冲突。您对我们如何隔离 Web 组件库以及它们可以在隔离模式下工作有什么想法吗?我们也使用过 ShadowDOM,但没有运气。

【问题讨论】:

  • 如果您要创建要在任何地方使用的微服务和组件,那么我建议不要为这些使用任何外部库。这将允许它们在任何地方使用。如果您使用 Angular 或 React 之类的库,那么组件的可移植性就会降低。即使您使用 lodash 或其他库,如果您不使用任何库,那么您创建的可移植代码也会更少。您的应用程序可以使用它想要的任何东西,但您的组件应该使用很少甚至不使用库。
  • 非常感谢您的评论。但是基于微服务架构,您可以使用任何框架,并且应该是隔离的和独立的可交付的。我正在尝试在前端实现这种方法。

标签: html web-component angular-components shadow-dom custom-element


【解决方案1】:
  1. Web 组件 技术没有这种隔离模式。所有导入的库都将共享相同的命名空间。

  2. Shadow DOM 不是关于 Javascript 代码隔离,而是只处理 DOM 和 CSS 隔离。

如果您想解决与导入的第 3 方库的冲突,您可以:

  • 将您的网站设计为仅在全局依赖项脚本中导入第 3 方导入一次。

  • 使用为您管理库加载的模块加载器,例如 require.js,或内置功能 ES6 模块 import 功能,甚至是您自己的 Vanilla 模块装载机。

  • 使用<iframe>elements 隔离您网站的不同部分(如果可能,但您可能会丢失一些交互功能)。

所有这些解决方案都有优点和缺点。这取决于您的需求。

【讨论】:

  • 谢谢@Supersharp。模块化方法有一个重要的限制,当您创建一个组件的新版本时,您应该在主应用程序中更新,这意味着构建新版本的主应用程序,因此微服务不会完全独立可交付。
  • 我在 Martin Fowler 的 blog987654321@ 中发现了有趣的话题
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多