我正在使用 Polymer 2 开发网络组件,并希望使用第三方 JavaScript 库,该库并非专门设计用于网络组件。据我所知,唯一的方法是包含一个 <script>
在我的 Web 组件的 HTML 文件中引用库的标记。
我发现这样做有几个问题,想知道是否有任何解决方法,以及确实以这种方式包含第三方库是否被视为不良做法。
外部库可能会设置页面上其他组件可见的全局变量,从而允许 Web 组件相互破坏,或破坏它们所在的页面。由于封装经常被吹捧为 one of the big advantages of using web components ,这似乎是个问题。
外部库可能会执行 DOM 查询或更新,而这将无法访问正在使用它们的 Web 组件的 shadow-dom,因此外部库可能根本无法正常工作,或者可能会更新托管页面的 DOM 再次破坏封装。
那么,我是不是遗漏了什么,或者这是否意味着在 Web 组件中包含外部库是一个非常糟糕的主意?如果是这样,这似乎是这项技术的一个巨大限制,因为我们无法利用那里大量预先存在的 JS 库。
最佳答案
如果您有一个外部库可以执行 document.querySelector
之类的操作,那么您有两个选择。
- 选择不将 ShadowDOM 与您的任何组件一起使用。如果说 不是一个选项,或者如果你真的,真的想使用 shadowDOM 然后:
- 需要修改第三方库允许root
要指定的元素,而不是始终使用
document
。
除了这两个选项之外,您可能无法使用假定 document
适用于所有内容的第三方库。
我想另一种选择是重新评估第三方库,看看它是否真的值得使用。
在我的团队中,我们不使用不仅仅是可靠逻辑的第三方库。像 moment.js 这样的东西只是逻辑,我们可以毫无问题地使用它们。
但是像 jQuery 这样的东西?呸!我看不出组件需要这样的东西。
祝你好运!
关于javascript - 在 Web 组件中使用外部 JS 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698021/