我创建了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
中的兄弟姐妹。
答案 0 :(得分:51)
应将私有资源安装在组件文件夹中并直接使用。但共享资源,我想要使用的其他组件(如marked
)的那些资源应作为依赖项处理。
我们建议使用两种约定来处理共享依赖项:
../<package-name>
(您已经这样做了)。按照惯例,聚合物需要一个平坦依赖文件夹(由Bower支持),因此您需要的任何资源必须始终位于此路径上。在这种情况下,
<script src="../marked/lib/marked.js">
符合第一个惯例。您的组件可能依赖于marked
包,并希望它存在于../
。
第二项公约支持分享。如果项目中的多个组件使用script
标记来加载库,则库将加载多次。另一方面,进口是重复数据删除,所以你没有这个问题。
例如,如果所有组件以标准方式加载marked
:
<link rel="import" href="../marked-import/marked-import.html">
然后你只会加载一个脚本副本。
此外,导入允许您间接实际资源。例如,通常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