Client libraries AEM basic
Client Libraries
Structure
.content.xml:
css.txt / js.txt
css.txt:
js.txt:
File order = concatenation order. #base= sets the target folder prefix. Unlisted files are omitted from the bundle.
Including in HTL
Multiple categories use an array: categories=['<site>.base', '<site>.components'].
Dependencies vs Embed
dependencies = keeps separate requests to ensure load order. embed = combines into 1 request. Use embed for the site's final bundle, dependencies for shared libs requiring independent caching.
dependencies:
→ 2 separate requests: <site>.base → <site>.components
embed:
→ 1 request: <site>.site (contains both base + components)
Component clientlib
The .content.xml of a component clientlib is similar, differing only in categories. Multiple components can use the same category (<site>.components) to bundle together.
ui.frontend Module
SCSS/TS builds outside AEM, output copies to ui.apps/.../clientlibs/. Standard flow:
npm run buildinsideui.frontend/- Output copied to
ui.apps/src/main/content/jcr_root/apps/<site>/clientlibs/ - Deploy Maven package into AEM
Dev loop: aem-clientlib-generator (standard archetype) or aemsync.
Naming Conventions
Debugging
?debugClientLibs=true— view unminified libs loading on page/libs/granite/ui/content/dumplibs.rebuild.html— invalidate cache + rebuild (use when changes do not reflect)- Check direct proxy file:
http://localhost:4502/etc.clientlibs/<site>/clientlibs/clientlib-base.css