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 AEM instantie 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 werkschema om een webpack project in een AEM cliëntbibliotheek te integreren.
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 AEM instantie 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 worden geproduceerd AEM Archetype van het Project.
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
. -
Inspect 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. -
Inspect 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 HTML elementen 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 uitgestald 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
Inspect de gewijzigde bestanden voor meer informatie over de WKND-stijlimplementatie.
Inspect de integratie van ui.frontend 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 AEM cliënt-zijbibliotheken 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. -
Inspect het bestand
site.css
onderui.frontend/dist/clientlib-site/site.css
. Dit is gecompileerde CSS die op de brondossiers van de Klasse wordt gebaseerd. -
Inspect 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. -
Inspect 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. Inspect 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 uitgevoerd automatisch wanneer een Maven bouwt van de wortel van het project mvn clean install -PautoInstallSinglePackage
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
Daarna, herzien hoe de clientlibs in de Pagina van de AEM van verwijzingen worden voorzien. Bij webontwikkeling kunt u het beste CSS direct vóór het sluiten van de </body>
-tag opnemen in de koptekst van de HTML <head>
en JavaScript.
-
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 de 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 de 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 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. 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, zien uiteindelijk 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 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 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 vervolgens opnieuw opgehaald van 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 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 tegenhouden de webpack server van de bevellijn door
CTRL+C
te typen.
geaëerd develop-aemfed
geaemfed is een open-bron, bevel-lijn hulpmiddel dat kan worden gebruikt om front-end ontwikkeling te versnellen. Het wordt aangedreven door aemsync, BrowserSync, en het Sling Logtrekker.
Op een hoog niveau, wordt aemfed
ontworpen om aan dossierveranderingen binnen de ui.apps module te luisteren en hen automatisch te synchroniseren direct aan een lopende AEM instantie. 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 veel werk binnen de {module 0} ui.apps doet, wijzigend manuscripten HTML, en creërend douanecomponenten, geaëerd kan een krachtig hulpmiddel zijn om te gebruiken. Volledige documentatie kan hierworden gevonden.
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 AEM instantie worden geregistreerd.
<host>/libs/granite/ui/content/dumplibs.html
-
Uitvoer van de Test- staat een gebruiker toe om de verwachte HTML output 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 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