javascript - 在 Web 组件中使用外部 JS 库

标签 javascript polymer web-component

我正在使用 Polymer 2 开发网络组件,并希望使用第三方 JavaScript 库,该库并非专门设计用于网络组件。据我所知,唯一的方法是包含一个 <script>在我的 Web 组件的 HTML 文件中引用库的标记。

我发现这样做有几个问题,想知道是否有任何解决方法,以及确实以这种方式包含第三方库是否被视为不良做法。

  1. 外部库可能会设置页面上其他组件可见的全局变量,从而允许 Web 组件相互破坏,或破坏它们所在的页面。由于封装经常被吹捧为 one of the big advantages of using web components ,这似乎是个问题。

  2. 外部库可能会执行 DOM 查询或更新,而这将无法访问正在使用它们的 Web 组件的 shadow-dom,因此外部库可能根本无法正常工作,或者可能会更新托管页面的 DOM 再次破坏封装。

那么,我是不是遗漏了什么,或者这是否意味着在 Web 组件中包含外部库是一个非常糟糕的主意?如果是这样,这似乎是这项技术的一个巨大限制,因为我们无法利用那里大量预先存在的 JS 库。

最佳答案

如果您有一个外部库可以执行 document.querySelector 之类的操作,那么您有两个选择。

  1. 选择不将 ShadowDOM 与您的任何组件一起使用。如果说 不是一个选项,或者如果你真的,真的想使用 shadowDOM 然后:
  2. 需要修改第三方库允许root 要指定的元素,而不是始终使用 document

除了这两个选项之外,您可能无法使用假定 document 适用于所有内容的第三方库。

我想另一种选择是重新评估第三方库,看看它是否真的值得使用。

在我的团队中,我们不使用不仅仅是可靠逻辑的第三方库。像 moment.js 这样的东西只是逻辑,我们可以毫无问题地使用它们。

但是像 jQuery 这样的东西?呸!我看不出组件需要这样的东西。

祝你好运!

关于javascript - 在 Web 组件中使用外部 JS 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698021/

相关文章:

polymer - Polymer 1.0 的最佳演示应用程序

javascript - tsconfig 中的模块选项是用来做什么的?

javascript - MongoDB Mongoose 更新updatedAt字段

javascript - 如何在原型(prototype)中获取元素的子索引

css - CSS Resets 应该如何应用于 Polymer 组件?

css - polymer : My core-list is no rendered when is in core-animated-pages element

javascript - 使用 jquery 和 HTML5 数据属性为背景颜色设置动画

dart - Dart中的 polymer 元素属性

javascript - 通过 dom-repeat 打印 DOM 数组

css - 为什么我的 Web 组件 CSS 不显示?我没有使用 shadowDOM