Clientbibliotheken en front-end workflow client-side-libraries
Leer hoe Client-Side Libraries of clientlibs worden gebruikt om CSS en JavaScript voor een implementatie van Adobe Experience Manager (AEM) Plaatsen op te stellen en te beheren. In deze zelfstudie wordt ook uitgelegd hoe de ui.frontend een ontkoppelde webpack -project, kan worden geïntegreerd in het ontwikkelproces van begin tot eind.
Vereisten prerequisites
Controleer de vereiste gereedschappen en instructies voor het instellen van een plaatselijke ontwikkelomgeving.
Het wordt ook aanbevolen de Basisbeginselen van componenten zelfstudie om inzicht te krijgen in de grondbeginselen van bibliotheken en AEM aan de clientzijde.
Starter-project
Bekijk de basislijncode waarop de zelfstudie is gebaseerd:
-
Kijk uit de
tutorial/client-side-libraries-start
vertakking van GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start
-
Stel codebasis aan een lokale AEM instantie op gebruikend uw Maven vaardigheden:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE Indien u AEM 6.5 of 6.4 gebruikt, voegt u de classic
aan om het even welke Gemaakt bevelen.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
U kunt de voltooide code altijd weergeven op GitHub of controleer de code plaatselijk door aan de tak over te schakelen tutorial/client-side-libraries-solution
.
Doelstellingen
- Begrijp hoe clientbibliotheken via een bewerkbare sjabloon op een pagina worden opgenomen.
- Leer hoe u de
ui.frontend
en een webpack-ontwikkelingsserver voor speciale front-end ontwikkeling. - Begrijp de werkstroom van begin tot eind van het leveren van gecompileerde CSS en JavaScript aan een implementatie van Plaatsen.
Wat u gaat bouwen what-build
In dit hoofdstuk voegt u enkele basislijnstijlen toe voor de WKND-site en de artikelpaginasjabloon om de implementatie dichter bij de UI-ontwerpmodellen. U gebruikt een geavanceerde front-end werkschema om een webpack project in een AEM cliëntbibliotheek te integreren.
Artikelpagina met toegepaste basislijnstijlen
Achtergrond background
Client-Side Libraries bieden een mechanisme voor het organiseren en beheren van CSS- en JavaScript-bestanden die nodig zijn voor een AEM Sites-implementatie. De basisdoelstellingen voor client-side bibliotheken of clientlibs zijn:
- CSS/JS opslaan in kleine aparte bestanden voor eenvoudigere ontwikkeling en eenvoudig onderhoud
- Afhankelijkheden van externe frameworks op georganiseerde wijze beheren
- Minimaliseer het aantal cliënt-zijverzoeken door CSS/JS in één of twee verzoeken samen te voegen.
Meer informatie over het gebruik Hier vindt u bibliotheken aan de clientzijde.
Bibliotheken aan de clientzijde hebben enkele beperkingen. Het meest in het bijzonder is een beperkte ondersteuning voor populaire front-end talen zoals Sass, LESS en TypeScript. Laten we in de zelfstudie bekijken hoe de ui.frontend kan dit helpen oplossen.
Startcode naar lokale AEM-instantie implementeren en naar http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html. Deze pagina is niet opgemaakt. Laten we Client-side bibliotheken voor het WKND-merk implementeren om CSS en JavaScript aan de pagina toe te voegen.
Client-Side Libraries-organisatie organization
Verken nu de organisatie van clientlibs die worden gegenereerd door de Projectarchetype AEM.
Het diagram van de cliënt-zijorganisatie van de Bibliotheek en paginaopneming op hoog niveau
-
Met VSCode of andere IDE opent u het dialoogvenster ui.apps -module.
-
Het pad uitbreiden
/apps/wknd/clientlibs
om de clientlibs te bekijken die door archetype worden geproduceerd.In de onderstaande sectie worden deze clientlibs nader bekeken.
-
De volgende tabel geeft een overzicht van de clientbibliotheken. Meer informatie over inclusief clientbibliotheken vindt u hier.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Naam Beschrijving Notities clientlib-base
Basisniveau van CSS en JavaScript nodig voor WKND-site om te kunnen functioneren Sluit de clientbibliotheken van de Core Component in clientlib-grid
Genereert de CSS die nodig is voor Lay-outmodus om te werken. Mobiele/tabletonderbrekingspunten kunnen hier worden geconfigureerd clientlib-site
Bevat site-specifiek thema voor de WKND-site Door de ui.frontend
moduleclientlib-dependencies
Sluit om het even welke derdegebiedsdelen in Door de ui.frontend
module -
Waarnemen dat
clientlib-site
enclientlib-dependencies
worden genegeerd van broncontrole. Dit is door ontwerp, aangezien deze bij bouwstijltijd doorui.frontend
-module.
Basisstijlen bijwerken base-styles
Werk vervolgens de basisstijlen bij die in het dialoogvenster ui.frontend -module. De bestanden in het dialoogvenster ui.frontend
module genereren clientlib-site
en clientlib-dependecies
bibliotheken die het thema Site en eventuele afhankelijkheden van derden bevatten.
Clientbibliotheken bieden geen ondersteuning voor meer geavanceerde talen zoals Soort of TypeScript. Er zijn verschillende opensource-gereedschappen, zoals NPM en webpack die de ontwikkeling aan de voorzijde versnellen en optimaliseren. Het doel van het ui.frontend moet deze hulpmiddelen kunnen gebruiken om de meeste front-end brondossiers te beheren.
-
Open de ui.frontend en navigeer naar
src/main/webpack/site
. -
Het bestand openen
main.scss
main.scss
is het ingangspunt voor de Sass-bestanden in het dialoogvensterui.frontend
-module. Het omvat de_variables.scss
bestand, dat een reeks merkvariabelen bevat die in de verschillende bestanden voor de klasse in het project moeten worden gebruikt. De_base.scss
Het bestand is ook opgenomen en definieert enkele basisstijlen voor HTML-elementen. Een reguliere expressie bevat de stijlen voor afzonderlijke componentstijlen ondersrc/main/webpack/components
. Een andere reguliere expressie omvat de bestanden ondersrc/main/webpack/site/styles
. -
Het bestand Inspect
main.ts
. Hieronder vallenmain.scss
en een reguliere expressie om.js
of.ts
bestanden in het project. Dit ingangspunt wordt gebruikt door webpack-configuratiebestanden als het ingangspunt voor de geheleui.frontend
-module. -
De onderliggende bestanden Inspect
src/main/webpack/site/styles
:Deze bestanden zijn stijlen voor algemene elementen in de sjabloon, zoals Koptekst, Voettekst en container met hoofdinhoud. De CSS-regels in deze bestanden zijn gericht op verschillende HTML-elementen
header
,main
, enfooter
. Deze HTML-elementen zijn gedefinieerd door het beleid in het vorige hoofdstuk Pagina's en sjablonen. -
Breid uit
components
map ondersrc/main/webpack
en inspecteer de bestanden.Elk bestand wordt toegewezen aan een Core-component zoals de Accordeoncomponent. Elke Core-component is gebouwd met Element-wijziging blokkeren of BEM-notatie, zodat het eenvoudiger wordt om specifieke CSS-klassen met stijlregels als doel in te stellen. De onderliggende bestanden
/components
zijn door het AEM Project Archetype met de verschillende regels van BEM voor elke component geschrapt. -
De WKND-basisstijlen downloaden wknd-base-styles-src-v3.zip en unzip het bestand.
Om de zelfstudie te versnellen, worden verschillende Sass-bestanden weergegeven die het WKND-merk implementeren op basis van Core Components en de structuur van het sjabloon voor artikelpagina.
-
De inhoud van
ui.frontend/src
met bestanden uit de vorige stap. De inhoud van de ZIP moet de volgende mappen overschrijven:code language-plain /src/main/webpack /components /resources /site /static
Inspect de gewijzigde bestanden voor meer informatie over de WKND-stijlimplementatie.
Inspect de integratie van ui.frontend ui-frontend-integration
Een belangrijk integratieonderdeel dat in de ui.frontend module, aem-clientlib-generator neemt de gecompileerde CSS en JS artefacten van een webpack/npm project en zet hen in AEM cliënt-zijbibliotheken om.
Deze integratie wordt automatisch ingesteld door het AEM Project Archetype. Ga vervolgens na hoe het werkt.
-
Open een opdrachtregelterminal en installeer de ui.frontend met de
npm install
opdracht:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm install
note note NOTE npm install
uitvoering is slechts eenmaal nodig , net als na een nieuwe kloon of generatie van het project . -
Start de webpack-ontwikkelserver in horloge door de volgende opdracht uit te voeren:
code language-shell $ npm run watch
-
Hiermee worden de bronbestanden van de
ui.frontend
en synchroniseert de wijzigingen met AEM op http://localhost:4502code language-shell + jcr_root/apps/wknd/clientlibs/clientlib-site/js/site.js + jcr_root/apps/wknd/clientlibs/clientlib-site/js + jcr_root/apps/wknd/clientlibs/clientlib-site + jcr_root/apps/wknd/clientlibs/clientlib-dependencies/css.txt + jcr_root/apps/wknd/clientlibs/clientlib-dependencies/js.txt + jcr_root/apps/wknd/clientlibs/clientlib-dependencies http://admin:admin@localhost:4502 > OK + jcr_root/apps/wknd/clientlibs/clientlib-site/css + jcr_root/apps/wknd/clientlibs/clientlib-site/js/site.js http://admin:admin@localhost:4502 > OK
-
De opdracht
npm run watch
vult uiteindelijk de clientlib-site en clientlib-afhankelijkheden in de ui.apps die dan automatisch met AEM wordt gesynchroniseerd.note note NOTE Er is ook een npm run prod
profiel dat de JS en CSS minieme. Dit is de standaardcompilatie wanneer de webpack-build wordt geactiveerd via Maven. Meer informatie over de ui.frontend module is hier te vinden. -
Het bestand Inspect
site.css
beneideui.frontend/dist/clientlib-site/site.css
. Dit is gecompileerde CSS die op de brondossiers van de Klasse wordt gebaseerd. -
Het bestand Inspect
ui.frontend/clientlib.config.js
. Dit is het configuratiebestand voor een npm-insteekmodule. aem-clientlib-generator dat de inhoud van/dist
naar een clientbibliotheek en naar deui.apps
-module. -
Het bestand Inspect
site.css
in de ui.apps module bijui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css
. Dit moet een identieke kopie zijn van hetsite.css
bestand van de ui.frontend -module. Nu is het ui.apps kan het aan AEM worden opgesteld.note note NOTE Sinds clientlib-site wordt gecompileerd tijdens bouwstijltijd, gebruikend of npm, of bemand, kan het veilig door broncontrole in worden genegeerd ui.apps -module. Inspect the .gitignore
bestand onder ui.apps. -
Open het artikel van LA Skatepark in AEM op: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
De bijgewerkte stijlen voor het artikel worden nu weergegeven. Mogelijk moet u op de een of andere manier vernieuwen om CSS-bestanden te wissen die in cache zijn geplaatst door de browser.
Het begint veel dichter bij de mockups te komen!
note note NOTE De stappen hierboven worden uitgevoerd om de code te bouwen en op te stellen ui.frontend aan AEM wordt uitgevoerd automatisch wanneer een Geleiende bouwstijl van de wortel van het project wordt teweeggebracht mvn clean install -PautoInstallSinglePackage
.
Een stijl wijzigen
Breng vervolgens een kleine wijziging aan in de ui.frontend
om de npm run watch
Implementeer de stijlen automatisch in de lokale AEM.
-
Van,
ui.frontend
het bestand openen:ui.frontend/src/main/webpack/site/_variables.scss
. -
Werk de
$brand-primary
kleurvariabele:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;
Sla de wijzigingen op.
-
Ga terug naar de browser en vernieuw de AEM pagina om de updates te zien:
-
De wijziging in de
$brand-primary
kleur en stop de webpack-build met de opdrachtCTRL+C
.
Pagina- en sjabloonopname page-inclusion
Daarna, herzien hoe de clientlibs in de Pagina van de AEM van verwijzingen worden voorzien. De beste manier bij webontwikkeling is om CSS op te nemen in de koptekst van de HTML <head>
en JavaScript vlak voor het sluiten </body>
-tag.
-
Blader naar de sjabloon Artikelpagina op http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html
-
Klik op de knop Pagina-informatie en in het menu dat u selecteert Paginabeleid om de Paginabeleid in.
Paginagegevens > Paginabeleid
-
U ziet dat de categorieën voor
wknd.dependencies
enwknd.site
worden hier weergegeven. Standaard worden clientlibs die via het paginabeleid zijn geconfigureerd, gesplitst om de CSS op te nemen in de paginakop en de JavaScript op de tekstopmaak. U kunt expliciet vermelden welke clientlib-JavaScript in de paginakop moet worden geladen. Dit is het geval voorwknd.dependencies
.note note NOTE Het is ook mogelijk te verwijzen naar de wknd.site
ofwknd.dependencies
rechtstreeks vanuit de paginacomponent, met decustomheaderlibs.html
ofcustomfooterlibs.html
script. Het gebruik van de sjabloon biedt flexibiliteit omdat u kunt kiezen welke clientlibs per sjabloon worden gebruikt. Als u bijvoorbeeld een zware JavaScript-bibliotheek hebt die alleen wordt gebruikt voor een geselecteerde sjabloon. -
Ga naar de LA Skateparks pagina gemaakt met de Artikelpaginasjabloon: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
-
Klik op de knop Pagina-informatie en in het menu dat u selecteert Weergeven als gepubliceerd om de artikelpagina buiten de AEM-editor te openen.
-
De paginabron weergeven van http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled en u zou de volgende clientlib verwijzingen in moeten kunnen zien
<head>
:code language-html <head> ... <script src="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.lc-d41d8cd98f00b204e9800998ecf8427e-lc.min.js"></script> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.lc-d41d8cd98f00b204e9800998ecf8427e-lc.min.css" type="text/css"> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-site.lc-78fb9cea4c3a2cc17edce2c2b32631e2-lc.min.css" type="text/css"> ... </head>
De clientlibs gebruiken de proxy
/etc.clientlibs
eindpunt. U zou ook moeten zien dat volgende clientlib bij de bodem van de pagina omvat:code language-html ... <script src="/etc.clientlibs/wknd/clientlibs/clientlib-site.lc-7157cf8cb32ed66d50e4e49cdc50780a-lc.min.js"></script> <script src="/etc.clientlibs/wknd/clientlibs/clientlib-base.lc-53e6f96eb92561a1bdcc1cb196e9d9ca-lc.min.js"></script> ... </body>
note note NOTE Voor AEM 6.5/6.4 worden de bibliotheken aan de clientzijde niet automatisch geminiateerd. Zie de documentatie op de HTML Library Manager om miniaturen in te schakelen (aanbevolen). note warning WARNING Het is essentieel aan de publicatiezijde dat de cliëntbibliotheken zijn niet aangedaan door /apps aangezien dit pad om veiligheidsredenen beperkt moet worden met behulp van de Sectie voor het filter Dispatcher. De allowProxy, eigenschap van de clientbibliotheek zorgt ervoor dat de CSS en JS worden aangeboden vanaf /etc.clientlibs.
Volgende stappen next-steps
Leer hoe te om individuele stijlen uit te voeren en de Componenten van de Kern te hergebruiken gebruikend het Systeem van de Stijl van de Experience Manager. Ontwikkelen met het Stijlsysteem behandelt het gebruiken van het Systeem van de Stijl om de Componenten van de Kern met merkspecifieke CSS en geavanceerde beleidsconfiguraties van de Redacteur van het Malplaatje uit te breiden.
De voltooide code weergeven op GitHub of herzie en stel plaatselijk de code bij de tak van de it op tutorial/client-side-libraries-solution
.
- Klonen met github.com/adobe/aem-wknd-guides opslagplaats.
- Kijk uit de
tutorial/client-side-libraries-solution
vertakking.
Aanvullende hulpmiddelen en bronnen additional-resources
Webpack DevServer - Statische opmaakcodes webpack-dev-static
In de voorgaande paar oefeningen zijn verschillende bestanden met een score opgenomen in de ui.frontend werden bijgewerkt en door een bouwstijlproces, uiteindelijk zie dat deze veranderingen in AEM weerspiegeld. Kijk nu naar een techniek die een webpack-server snel de front-end stijlen te ontwikkelen tegen static HTML.
Deze techniek is handig als de meeste stijlen en front-end code worden uitgevoerd door een toegewijde front-end ontwikkelaar die mogelijk geen eenvoudige toegang tot een AEM omgeving heeft. Met deze techniek kan de FED ook direct wijzigingen aanbrengen aan de HTML, die vervolgens aan een AEM ontwikkelaar kan worden overgedragen om als onderdelen te implementeren.
-
Kopieer de paginabron van de artikelpagina van het LA skatepark op http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.
-
Open uw IDE opnieuw. Plak de gekopieerde markering van AEM in de
index.html
in de ui.frontend module ondersrc/main/webpack/static
. -
De gekopieerde markering bewerken en verwijzingen verwijderen naar clientlib-site en clientlib-afhankelijkheden:
code language-html <!-- remove --> <script type="text/javascript" src="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.js"></script> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-dependencies.css" type="text/css"> <link rel="stylesheet" href="/etc.clientlibs/wknd/clientlibs/clientlib-site.css" type="text/css"> ... <script type="text/javascript" src="/etc.clientlibs/wknd/clientlibs/clientlib-site.js"></script>
Verwijder deze referenties omdat de webpack-ontwikkelserver deze artefacten automatisch genereert.
-
Start de webpack dev-server vanaf een nieuwe terminal met de volgende opdracht vanuit de ui.frontend module:
code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend/ $ npm start > aem-maven-archetype@1.0.0 start code/aem-guides-wknd/ui.frontend > webpack-dev-server --open --config ./webpack.dev.js
-
Hiermee opent u een nieuw browservenster op http://localhost:8080/ met statische opmaakcodes.
-
Het bestand bewerken
src/main/webpack/site/_variables.scss
bestand. Vervang de$text-color
regel met het volgende:code language-diff - $text-color: $black; + $text-color: $pink;
Sla de wijzigingen op.
-
De wijzigingen worden automatisch in de browser weergegeven http://localhost:8080.
-
Controleer de
/aem-guides-wknd.ui.frontend/webpack.dev.js
bestand. Dit bevat de webpack-configuratie die wordt gebruikt om de webpack-dev-server te starten. De paden worden gevuld/content
en/etc.clientlibs
van een lokaal actieve instantie van AEM. Zo worden de afbeeldingen en andere clientlibs (niet beheerd door de ui.frontend code) beschikbaar worden gesteld.note caution CAUTION De afbeeldingsbron van de statische markering verwijst naar een actieve afbeeldingscomponent op een lokale AEM. Afbeeldingen worden verbroken weergegeven als het pad naar de afbeelding verandert, als AEM niet is gestart of als de browser zich niet heeft aangemeld bij de lokale AEM. Als u de afbeelding naar een externe bron afgeeft, is het ook mogelijk de afbeeldingen te vervangen door statische verwijzingen. -
U kunt stoppen de webpack-server vanaf de opdrachtregel door te typen
CTRL+C
.
geaëerd develop-aemfed
geaëerd is een open-bron, bevel-lijn hulpmiddel dat kan worden gebruikt om front-end ontwikkeling te versnellen. Het wordt aangedreven door aemsync, Browsersync, en Sling Log Tracker.
Op hoog niveau aemfed
is ontworpen om te luisteren naar bestandswijzigingen binnen het ui.apps en deze automatisch rechtstreeks te synchroniseren met een actieve AEM. Op basis van de wijzigingen wordt een lokale browser automatisch vernieuwd, waardoor de ontwikkeling aan de voorkant sneller gaat. Het wordt ook gebouwd om met de Traceur van het Logboek van het Sling te werken om het even welke server-zijfouten direct in de terminal automatisch te tonen.
Als u binnen de ui.apps modules, HTML-scripts wijzigen en aangepaste componenten maken, geaëerd kan een krachtig hulpmiddel zijn om te gebruiken. Hier vindt u volledige documentatie.
Fouten opsporen in clientbibliotheken debugging-clientlibs
Verschillende methoden gebruiken categorieën en insluiten om veelvoudige cliëntbibliotheken te omvatten kan het lastig zijn om problemen op te lossen. AEM stelt verschillende hulpmiddelen beschikbaar om hierbij te helpen. Een van de belangrijkste instrumenten is Client-bibliotheken opnieuw samenstellen waarbij AEM alle LESS-bestanden opnieuw compileren en de CSS genereren.
-
Reliëfstructuren - Hier worden de clientbibliotheken weergegeven die in de AEM zijn geregistreerd.
<host>/libs/granite/ui/content/dumplibs.html
-
Uitvoer testen - stelt een gebruiker in staat de verwachte HTML-uitvoer van clientlib te zien op basis van categorie.
<host>/libs/granite/ui/content/dumplibs.test.html
-
Validatie van bibliotheekafhankelijke onderdelen - Hiermee worden afhankelijkheden of ingesloten categorieën gemarkeerd die niet zijn gevonden.
<host>/libs/granite/ui/content/dumplibs.validate.html
-
Client-bibliotheken opnieuw samenstellen - kan een gebruiker de AEM dwingen de clientbibliotheken opnieuw op te bouwen of de cache van clientbibliotheken ongeldig te maken. Dit gereedschap is effectief bij het ontwikkelen met LESS, omdat dit AEM ertoe kan dwingen de gegenereerde CSS opnieuw te compileren. Over het algemeen is het effectiever om de cache ongeldig te maken en vervolgens een pagina te vernieuwen in plaats van de bibliotheken opnieuw samen te stellen.
<host>/libs/granite/ui/content/dumplibs.rebuild.html