【问题标题】:Polymer element with javascript dependencies具有 javascript 依赖项的聚合物元素
【发布时间】:2014-03-02 23:24:43
【问题描述】:

我创建了a Polymer element for rendering markdown,它使用了marked.js 库。我想知道,加载其依赖项的推荐方式是什么?

我应该只使用脚本标签吗?

<script src="../marked/lib/marked.js"></script>

或者将我所有的依赖项放入一个 html 导入并链接到那个文件会更好。在这种情况下,我只有一个依赖项,但我可以轻松拥有更多。

<!-- in scripts.html -->
<script src="../marked/lib/marked.js"></script>
<script src="../foo/foo.js"></script>
<script src="../bar/bar.js"></script>

<!-- in mark-down.html -->
<link rel="import" href="scripts.html">

注意:这些路径假定我的元素(及其依赖项)与 bower 一起安装,因此它们都应该是 bower_components 中的兄弟姐妹。

【问题讨论】:

  • 我会选择后者,但关闭脚本标签。

标签: polymer


【解决方案1】:

私有资源应安装在您的组件文件夹中并直接使用。但是共享资源,那些其他组件也想使用的资源(比如marked),应该作为依赖来处理。

我们建议两种处理共享依赖的约定:

  1. 始终使用../&lt;package-name&gt;规范路径(您已经这样做了)。按照惯例,Polymer 需要一个平面依赖文件夹(由 Bower 支持),因此您需要的任何资源都必须始终位于此路径上。
  2. 引用共享资源的导入

在这种情况下,

&lt;script src="../marked/lib/marked.js"&gt;

符合第一个约定。您的组件可以依赖于marked 包并期望它存在于../

第二个约定支持共享。如果一个项目中的多个组件使用script 标记来加载库,则该库将加载多次。另一方面,导入是重复数据删除的,所以你没有这个问题。

例如,如果所有组件都以标准方式加载marked

&lt;link rel="import" href="../marked-import/marked-import.html"&gt;

那么您将只加载一份脚本副本。

此外,导入允许您间接访问实际资源。例如,通常marked-import 将依赖于marked 并使用script 标记来加载JavaScript。但事实上,任何特定的项目作者都可以修改本地的marked-import.html 以从 CDN 或任何其他位置加载主代码。通过导入间接访问所有访问,我们创建了一个控制点。

今天,marked 和其他库不包含导入文件,因此我们必须填补这些空白。此外,它还需要与其他组件协调(就任何特定共享资源的标准导入名称达成一致)。随着(如果)这些约定被采纳,这些问题会随着时间的推移而减少。

因此,您安装的组件将如下所示:

/components
  /mark-down - depends on marked-import
  /marked-import - (controlled by user, can just depend on `../marked`)
  /marked

【讨论】:

  • 谢谢。我假设聚合物标记元素遵循相同的模式,但我不明白对聚合物.html 的 引用如何在指向 '../polymer/polymer.html 的根目录中的标记元素.html 中工作'?我知道在分发组件之后,所有内容都将在 bower_components 目录中展开,但是在组件开发过程中呢?谢谢
  • polymer 只是像markedmark-downmarked-import 这样的组件。它应该和其他人一起坐在/components 中。我们通常不区分开发和部署(除非您在谈论连接资源 [硫化],这是一个不同的主题)。
  • 现在这仍然是 Polymer 1.0 的推荐方法吗? ES6 模块呢?
  • 这种处理依赖关系的方式是否会导致marked 全局可用?看起来是这样,与 ES6 模块相比,这是一个缺点......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多