Adobe CQ / AEM Client Lib 通道属性与 cq:includeClientLib 标记的交互



我正在努力提高Adobe cq中的页面性能,并且我看到了各种站点(1,2),其中提到了cq类型节点的channels属性:ClientLibraryFolder

我设置了一个包含 2 个组件(cmpAcmpB)的小示例。两者都具有 cmps.cmp类别值,并且位于应用程序目录中。然后,我在 etc 文件夹中创建了另一个类型为 cq:ClientLibraryFolder 的节点,该节点具有 cmps.cmp 的嵌入属性和值为 cmps.all 的类别属性

在我看来,我有以下内容,它从两个组件 css 在其各自的客户端 lib 文件夹中生成一个串联的 css 文件。

<cq:includeClientLib css="cmps.all" />

当我添加 !touch 作为 cmpB 的通道属性,然后覆盖 chrome 中的用户代理到 iPhone 时,cmpB 的 css 仍然是串联的。

  1. localhost:4502/libs/cq/ui/content/dumplibs.html 验证通道属性是否设置为 !touch
  2. 我已经通过添加一个控制台来确认当前频道是触摸的.log在 etc/clientlibs/foundation/librarymanager/DefaultChannelDetector 中.js
  3. 在 url 中添加 ?debug=true .css 确认包含来自两个客户端库的 css

我想使用 channels 属性来逐步淘汰某些 css(并最终淘汰给定某些用例的 js)文件,同时不要像文档模糊建议的那样使用额外的逻辑使标记过于复杂。我的目标是我的最终结果是一个单一的css文件(通过配置管理器(服务器/系统/控制台/配置Mgr)中的Day CQ HTML库管理器缩小和压缩)。

我是否错误地使用了通道属性?它甚至意味着以我使用它的方式使用吗?任何见解将不胜感激。

必须在

clientlib 节点上设置channels属性。 如果你想为一个特定的通道提供特殊的CSS/JS,你需要至少创建2个客户端库:

  1. 第一个客户端lib将具有categories=[cmps.all]
  2. 第二个客户端lib将具有categories=[cmps.all]channels=[!touch]

第一个将始终加载 CMPS.all,而第二个将仅加载非触摸通道。

最新更新