【问题标题】:Web Components and dependencies isolationWeb 组件和依赖项隔离
【发布时间】:2016-09-04 03:24:49
【问题描述】:

Web 组件真的隔离了每个组件内部的依赖关系吗? 我在同一页面中导入了两个组件,但出现以下错误:

Uncaught TypeError: JSON.stringify is not a function

当单独在页面中时,每个组件都可以正常工作。关于如何解决这个问题的任何想法?

谢谢。

【问题讨论】:

  • 请分享更多代码
  • 冲突的库是 MooWheel (mootools-1.2-core-nc.js, mootools-1.2-more.js, excanvas.js, canvastext.js, moowheel.js) 和一些 jquery。 js、jquery-xdomainrequest.js 和大气-min.js。每组库都导入到我的每个 Web 组件中。
  • 您使用哪种浏览器?它是否指示未捕获的错误来自哪个文件?

标签: javascript dependencies web-component


【解决方案1】:

它不隔离依赖关系,也不在沙盒 JavaScript 中运行。但是,您可以使用 Web 组件 imports 来确保您的依赖项被下载并只运行一次:

1) 将导入添加到您的 Web 组件 html 的每个

<link rel="import" href="dependencies.html" />

2) 那么dependencies.html 应该包含您只需要运行一次的所有脚本:

<script type="text/javascript" src="mootools-1.2-core-nc.js"></script>
<script type="text/javascript" src="mootools-1.2-more.js"></script>
....

浏览器只会在一个页面上下载一次dependencies.html,并且只运行一次。在第一次之后,它将简单地忽略同一文件的其他导入。

更多信息在这里:

http://www.html5rocks.com/en/tutorials/webcomponents/imports/


更新,如果您对每个 web 组件有不同的依赖项:

1) 将所有需要的导入添加到每个您的 Web 组件 html:

<link rel="import" href="import-mootools-1.2-core-nc.html" />
<link rel="import" href="import-mootools-1.2-more.html" />

2) 然后导入文件应该包含一个脚本,你只需要运行一次:

文件import-mootools-1.2-core-nc.html 只包含这一行:

<script type="text/javascript" src="mootools-1.2-core-nc.js"></script>

文件import-mootools-1.2-more.html 仅包含这一行:

<script type="text/javascript" src="mootools-1.2-more.js"></script>

注意:如果在那之后你仍然有问题,那不是因为你多次包含依赖项。查看控制台上的“网络”选项卡,您会看到它只下载了一次。您可能还有其他问题。

【讨论】:

  • 不幸的是,这不起作用。我的每个组件都有一个不同的 dependencies.html 文件,我单独打包每个组件,然后将它们导入 HTML 文件,但显然一个组件的依赖关系会影响另一个组件的行为。
  • 只需为每个依赖项创建一个不同的 HTML 文件,并通过单独的导入包含每个依赖项。例如,创建一个仅包含&lt;script type="text/javascript" src="mootools-1.2-core-nc.js"&gt;&lt;/script&gt;mootools-1.2-core-nc.html 文件,然后将其包含在&lt;link rel="import" href="mootools-1.2-core-nc.html" /&gt; 中。对所有依赖项执行此操作。
  • 非常感谢您的回答。我做到了,但没有改变任何东西。无论如何,我已经在不同的 HTML 文件中有冲突的依赖项,并将它们中的每一个单独导入到不同的组件中,然后打包它们中的每一个(所以理论上,当它们没有的时候,依赖关系应该在这个阶段解决冲突),但是当这两个 web 组件被导入到同一个页面时,冲突仍然存在。
  • 查看以上更新。如果您已经在这样做,那么您的问题不是两次导入库的冲突(因为您不是),而是其他问题。祝你好运。
【解决方案2】:

不,如果 Web 组件处理全局对象或全局上下文,它们通常不会隔离外部依赖项。

您的问题是您要(至少)两次导入一个库,而该库不允许这样做。

无论如何都与 Web 组件无关。

更新:polyfill webcomponents.js 也不应该被导入两次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 2018-09-04
    • 2022-07-15
    • 2012-06-04
    • 2020-01-31
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多