cq:includeClientLib 在 AEM 中,如果包含在组件中 jsp 并且该组件在页面上出现两次

cq:includeClientLib in AEM if included inside a component jsp and the component is present twice on the page

如果我们在我的组件 jsp 中提供 cq:includeClientLib 并且如果我们在该页面上拖放组件两次,clientlib 是否会获得两次 loaded/included?

如果我们用 Sightly 的方式来做会怎样 (data-sly-call="${clientlib.all @ categories='somecategory'}") ?

以及包含客户端库的建议方法是什么,要么创建一个特定于该组件的客户端库并仅为该组件加载,要么将所有 CSS 和 JS 包含在一个公共客户端库中并在整个过程中使用它?

,clientlib对一个类别只包含一次。

这是设计使然,因为 HTL(和相应的 JSP 标签)在运行时进行评估,并且处理器保留已包含的类别映射,并且不会再次包含它们。

如@i.net所述,每个类别只会包含一次。回答有关建议方法的后续问题..

最佳做法似乎是为每个组件定义一个客户端库,然后将其嵌入到 "global" 客户端库中。然后,该全局客户端库将包含在您的页面模板中。

/etc/designs/acme/clientlibs-all
    categories=["acme-all"]
    embed=[compA,compB]
/apps/acme/components/compA/clientlibs
    categories=["compA"]
/apps/acme/components/compB/clientlibs
    categories=["compB"]

全局客户端库位于 /etc/designs 下的原因是为了防止将 /apps 暴露给 public。但是,在 AEM 6.3 中,您可以使用 allowProxy 属性 在 /etc.designs/ 处提供代码。这看起来像这样:

/apps/acme/clientlibs/clientlibs-all
    categories=["acme-all"]
    embed=[compA,compB]
    allowProxy=true
/apps/acme/components/compA/clientlibs
    categories=["compA"]
/apps/acme/components/compB/clientlibs
    categories=["compB"]

Adobe 最近发布了有关客户端库结构的最新最佳实践的优秀教程:https://helpx.adobe.com/experience-manager/kt/sites/using/getting-started-wknd-tutorial-develop/part3.html