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. Dit leerprogramma behandelt ook hoe de {🔗 module 0} ui.frontend, een ontkoppelde webpackproject, in het bouwstijlproces van begin tot eind kan worden geïntegreerd.
Vereisten prerequisites
Herzie het vereiste tooling en de instructies voor vestiging a lokale ontwikkelomgeving.
Het wordt ook geadviseerd om de Basisbeginselen van de Componentleerprogramma te herzien om de grondbeginselen van cliënt-zijbibliotheken en AEM te begrijpen.
Starter-project
Bekijk de basislijncode waarop de zelfstudie is gebaseerd:
-
Controle uit de
tutorial/client-side-libraries-start
tak van GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start
-
Stel codebasis aan een lokale instantie van AEM op gebruikend uw Maven vaardigheden:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE Als u AEM 6.5 of 6.4 gebruikt, voegt u het classic
-profiel toe aan Maven-opdrachten.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
U kunt de gebeëindigde code op GitHubaltijd bekijken of de code plaatselijk controleren door aan de tak tutorial/client-side-libraries-solution
te schakelen.
Doelstellingen
- Begrijp hoe clientbibliotheken via een bewerkbare sjabloon op een pagina worden opgenomen.
- Leer hoe u de module
ui.frontend
en een webpack-ontwikkelingsserver gebruikt voor speciale front-end ontwikkeling. - Begrijp de werkschema 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 sommige basislijnstijlen voor de plaats WKND en het Malplaatje van de Pagina van het Artikel toe om de implementatie dichter aan de UI ontwerpmodellente brengen. U gebruikt een geavanceerde front-end workflow om een webpack-project te integreren in een AEM-clientbibliotheek.
de Pagina van het Artikel 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 gebruiken van cliënt-Kant Bibliotheken kan hier worden gevonden.
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. In het leerprogramma, kijken hoe de {module 0} ui.frontend dit kan helpen oplossen.
Stel de basis van de startcode aan een lokale instantie van AEM op en navigeer aan 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
Daarna onderzoeken wij de organisatie van clientlibs die door het Archetype van het Project van AEMworden geproduceerd.
de organisatie van de cliënt-zijBibliotheek van het diagram van het hoog-niveau en paginaconclusie
-
Het gebruiken van VSCode of andere winde opent omhoog de {module 0} ui.apps.
-
Breid de weg
/apps/wknd/clientlibs
uit 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 details over met inbegrip van de Bibliotheken van de Cliënt kunnen hierworden gevonden.
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 vereist voor WKND-site om te kunnen functioneren Sluit de clientbibliotheken van de Core Component in clientlib-grid
Produceert CSS noodzakelijk voor Wijze van de Lay-outom te werken. Mobiele/tabletonderbrekingspunten kunnen hier worden geconfigureerd clientlib-site
Bevat site-specifiek thema voor de WKND-site Gegenereerd door de module ui.frontend
clientlib-dependencies
Sluit om het even welke derdegebiedsdelen in Gegenereerd door de module ui.frontend
-
Let op:
clientlib-site
enclientlib-dependencies
worden genegeerd vanuit bronbesturing. Dit is door ontwerp, aangezien deze bij bouwstijltijd door deui.frontend
module worden geproduceerd.
Basisstijlen bijwerken base-styles
Daarna, werk de basisstijlen bij die in worden bepaald ui.frontend module. De bestanden in de module ui.frontend
genereren de bibliotheken clientlib-site
en clientlib-dependecies
met het thema Site en eventuele afhankelijkheden van derden.
De cliënt-zijbibliotheken steunen geen geavanceerdere talen zoals Sassof TypeScript. Er zijn verscheidene open-bronhulpmiddelen zoals NPMen webpackdie vooruitstrevende ontwikkeling versnellen en optimaliseren. Het doel van de {module 0} ui.frontend moet deze hulpmiddelen kunnen gebruiken om de meeste front-end brondossiers te beheren.
-
Open omhoog de {module 0} ui.frontend en navigeer aan
src/main/webpack/site
. -
Het bestand openen
main.scss
main.scss
is het ingangspunt voor de dossiers van de Klasse in deui.frontend
module. Het bevat het bestand_variables.scss
, dat een reeks merkvariabelen bevat die in de verschillende geluidsbestanden van het project moeten worden gebruikt. Het bestand_base.scss
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 bevat de bestanden ondersrc/main/webpack/site/styles
. -
Controleer het bestand
main.ts
. Het bevatmain.scss
en een reguliere expressie voor het verzamelen van.js
- of.ts
-bestanden in het project. Dit ingangspunt wordt gebruikt door de dossiers van de webpakconfiguratieals ingangspunt voor de volledigeui.frontend
module. -
Controleer de bestanden onder
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 elementen van HTML werden bepaald door beleid in het vorige hoofdstuk Pagina's en Malplaatjes. -
Vouw de map
components
ondersrc/main/webpack
uit en inspecteer de bestanden.Elk dossier brengt aan een Component van de Kern zoals de Component van de Accordeonin kaart. Elke Component van de Kern wordt gebouwd met Modifier van het Element van het Blokof BEM aantekening om het gemakkelijker te maken om specifieke CSS klassen met stijlregels te richten. De bestanden onder
/components
zijn door het AEM Project Archetype uitgesneden met de verschillende BEM-regels voor elke component. -
Download de Stijlen van de Basis WKND wknd-base-styles-src-v3.zip en unzip het dossier.
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.
-
Overschrijf 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
Controleer de gewijzigde bestanden om details van de WKND-stijlimplementatie te bekijken.
De integratie ui.frontend controleren ui-frontend-integration
Een zeer belangrijk integratiestuk dat in wordt gebouwd ui.frontend module, aem-clientlib-generatorneemt gecompileerde CSS en JS artefacten van een webpack/npm project en zet hen in cliënt-zijbibliotheken van AEM om.
Deze integratie wordt automatisch ingesteld door het AEM Project Archetype. Ga vervolgens na hoe het werkt.
-
Open een bevel-lijn terminal en installeer ui.frontend module gebruikend het
npm install
bevel:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm install
note note NOTE npm install
hoeft slechts eenmaal te worden uitgevoerd, net als na een nieuwe kloon of generatie van het project. -
Open
ui.frontend/package.json
en in het manuscripten begin bevel voegt--env writeToDisk=true
toe.code language-json { "scripts": { "start": "webpack-dev-server --open --config ./webpack.dev.js --env writeToDisk=true", } }
-
Begin de webpack dev server op horloge wijze door het volgende bevel in werking te stellen:
code language-shell $ npm run watch
-
Dit compileert de brondossiers van de
ui.frontend
module en synchroniseert de veranderingen met AEM in 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
-
Het bevel
npm run watch
bevolkt uiteindelijk de clientlib-plaats en client-afhankelijkheden in de ui.apps module die dan automatisch met AEM wordt gesynchroniseerd.note note NOTE Er is ook een npm run prod
-profiel dat de JS en CSS minieme waarden geeft. Dit is de standaardcompilatie wanneer de webpack-build wordt geactiveerd via Maven. Meer details over de {🔗 kunnen worden gevonden module 0} ui.frontend. -
Controleer het bestand
site.css
onderui.frontend/dist/clientlib-site/site.css
. Dit is gecompileerde CSS die op de brondossiers van de Klasse wordt gebaseerd. -
Controleer het bestand
ui.frontend/clientlib.config.js
. Dit is het configuratiedossier voor een npm stop, aem-clientlib-generatordie de inhoud van/dist
in een cliëntbibliotheek omzet en het naar deui.apps
module verplaatst. -
Inspecteer het dossier
site.css
in de {module 1} ui.apps bijui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css
. Dit zou een identiek exemplaar van hetsite.css
dossier van de {module 1} ui.frontend moeten zijn. Nu het in ui.apps module is kan het aan AEM worden opgesteld.note note NOTE Aangezien client-plaats tijdens bouwstijltijd wordt gecompileerd, gebruikend of npm, of gemandateerd, kan het veilig van broncontrole in de ui.apps module worden genegeerd. Inspecteer het .gitignore
dossier onder ui.apps. -
Open het artikel van LA Skatepark in AEM in: 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 ui.frontend aan AEM te bouwen en op te stellen worden automatisch uitgevoerd wanneer een Maven bouwstijl van de wortel van het project mvn clean install -PautoInstallSinglePackage
wordt teweeggebracht.
Een stijl wijzigen
Breng vervolgens een kleine wijziging aan in de module ui.frontend
om te zien hoe npm run watch
de stijlen automatisch implementeert in de lokale AEM-instantie.
-
Open vanuit de module
ui.frontend
het bestand:ui.frontend/src/main/webpack/site/_variables.scss
. -
Werk de kleurvariabele
$brand-primary
bij: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:
-
Vorige versie de wijziging in de
$brand-primary
-kleur en stop de webpack-bewerking met de opdrachtCTRL+C
.
Pagina- en sjabloonopname page-inclusion
Laten we nu bekijken hoe naar de clientlibs wordt verwezen in de AEM-pagina. Bij webontwikkeling kunt u het beste CSS direct in de HTML Header <head>
en JavaScript opnemen voordat u de tag </body>
sluit.
-
Blader naar het malplaatje van de Pagina van het Artikel in http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html
-
Klik het pictogram van de Informatie van de Pagina en in het menu uitgezocht Beleid van de Pagina om de dialoog van het Beleid van de Pagina te openen.
de Informatie van de Pagina > Beleid van de Pagina
-
De categorieën
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 het hoofdeinde. U kunt de clientlib-JavaScript die in de paginakop moet worden geladen expliciet weergeven. Dit geldt voorwknd.dependencies
.note note NOTE Het is ook mogelijk rechtstreeks naar de wknd.site
- ofwknd.dependencies
-pagina te verwijzen vanuit de paginacomponent met behulp van hetcustomheaderlibs.html
- ofcustomfooterlibs.html
-script. Het gebruik van de sjabloon biedt flexibiliteit omdat u kunt kiezen welke clientlibs per sjabloon worden gebruikt. Bijvoorbeeld, als u een zware bibliotheek van JavaScript hebt die slechts op een uitgezochte malplaatje zal worden gebruikt. -
Navigeer aan LA Skateparks pagina die gebruikend het Malplaatje van de Pagina van het Artikel wordt gecreeerd: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
-
Klik het pictogram van de Informatie van de Pagina en in het menu uitgezocht Mening zoals Gepubliceerd om de artikelpagina buiten de Redacteur van AEM te openen.
-
Bekijk de bron van de Pagina van http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disableden u zou de volgende clientlib verwijzingen in
<head>
moeten kunnen zien: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 het 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 Manager van de Bibliotheek van HTML om (geadviseerde) minificatie toe te laten. note warning WARNING Het is kritiek op publiceer kant dat de cliëntbibliotheken niet van worden gediend/apps aangezien deze weg om veiligheidsredenen zou moeten worden beperkt gebruikend de de filtersectie van Dispatcher. Het allowProxy bezitvan de cliëntbibliotheek verzekert CSS en JS van /etc.clientlibs worden gediend.
Volgende stappen next-steps
Leer hoe u afzonderlijke stijlen implementeert en Core Components opnieuw gebruikt met Experience Manager Style System. het ontwikkelen met het Systeem van de Stijlbehandelt 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.
Bekijk de gebeëindigde code op GitHubof herzie en stel plaatselijk de code bij de tak van het Git tutorial/client-side-libraries-solution
op.
- Kloon de github.com/adobe/aem-wknd-guidesbewaarplaats.
- Bekijk de
tutorial/client-side-libraries-solution
-vertakking.
Aanvullende hulpmiddelen en bronnen additional-resources
Webpack DevServer - Statische opmaakcodes webpack-dev-static
In de vorige paar oefeningen werden verscheidene dossiers van de Klasse in de {module 0} ui.frontend bijgewerkt en door een bouwstijlproces, uiteindelijk zien dat deze veranderingen in AEM weerspiegeld. Daarna kijken naar een techniek die a webpack-dev-servergebruikt om de front-end stijlen tegen statische HTML snel te ontwikkelen.
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 heeft tot een AEM-omgeving. Met deze techniek kan de FED ook direct wijzigingen aanbrengen aan de HTML, die vervolgens kan worden overgedragen aan een AEM-ontwikkelaar om te implementeren als onderdelen.
-
Kopieer de paginabron van de LA het artikelpagina van het skatepark in http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.
-
Open uw IDE opnieuw. Plak de gekopieerde prijsverhoging van AEM in
index.html
in de {module 1} ui.frontend ondersrc/main/webpack/static
. -
Bewerk de gekopieerde prijsverhoging en verwijder om het even welke verwijzingen naar clientlib-plaats en clientlib-gebiedsdelen:
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.
-
Begin de webpack dev server van een nieuwe terminal door het volgende bevel van binnen de {module 0} in werking te stellen ui.frontend:
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
-
Dit zou een nieuw browser venster in http://localhost:8080/met statische prijsverhoging moeten openen.
-
Bewerk het bestand
src/main/webpack/site/_variables.scss
. Vervang de$text-color
-regel door:code language-diff - $text-color: $black; + $text-color: $pink;
Sla de wijzigingen op.
-
U zou automatisch de veranderingen moeten zien die automatisch in browser op http://localhost:8080worden weerspiegeld.
-
Controleer het
/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/content
en/etc.clientlibs
worden doorgegeven vanuit een lokaal actieve instantie van AEM. Dit is hoe de beelden, en andere clientlibs (die niet door worden beheerd ui.frontend code) ter beschikking worden gesteld.note caution CAUTION De afbeeldingsbron van de statische markering verwijst naar een live-afbeeldingscomponent op een lokale AEM-instantie. Afbeeldingen worden verbroken weergegeven als het pad naar de afbeelding verandert, als AEM niet wordt gestart of als de browser zich niet heeft aangemeld bij de lokale AEM-instantie. Als u de afbeelding naar een externe bron afgeeft, is het ook mogelijk de afbeeldingen te vervangen door statische verwijzingen. -
U kunt tegenhouden de webpack server van de bevellijn door
CTRL+C
te typen.
Fouten opsporen in clientbibliotheken debugging-clientlibs
Het gebruiken van verschillende methodes van categorieën en sluit in om veelvoudige cliëntbibliotheken te omvatten het kan lastig zijn om problemen op te lossen. AEM stelt verschillende hulpmiddelen beschikbaar om hierbij te helpen. Één van de belangrijkste hulpmiddelen is opnieuw bouwt de Bibliotheken van de Cliënt die AEM dwingt om om het even welke LESS dossiers opnieuw te compileren en CSS te produceren.
-
de Libben van de Reliëf- maakt een lijst van de cliëntbibliotheken die in de instantie van AEM worden geregistreerd.
<host>/libs/granite/ui/content/dumplibs.html
-
Uitvoer van de Test- staat een gebruiker toe om de verwachte output van HTML van clientlib te zien omvat gebaseerd op categorie.
<host>/libs/granite/ui/content/dumplibs.test.html
-
de bevestiging van de Afhankelijkheden van Bibliotheken- benadrukt om het even welke gebiedsdelen of ingebedde categorieën die niet kunnen worden gevonden.
<host>/libs/granite/ui/content/dumplibs.validate.html
-
herbouwt de Bibliotheken van de Cliënt- staat een gebruiker toe om AEM te dwingen om de cliëntbibliotheken te herbouwen of het geheime voorgeheugen van cliëntbibliotheken ongeldig te maken. Dit gereedschap is effectief bij het ontwikkelen met LESS, omdat dit AEM 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