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 webpack project, 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 Component leerprogramma 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-starttak van GitHub code 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 -PautoInstallSinglePackagenote 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 GitHub altijd 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.frontenden 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 ontwerpmodellen te 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 AEM worden 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/clientlibsuit 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 hier worden gevonden.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Naam Beschrijving Notities clientlib-baseBasisniveau van CSS en JavaScript vereist voor WKND-site om te kunnen functioneren Sluit de clientbibliotheken van de Core Component in clientlib-gridProduceert CSS noodzakelijk voor Wijze van de Lay-out om te werken. Mobiele/tabletonderbrekingspunten kunnen hier worden geconfigureerd clientlib-siteBevat site-specifiek thema voor de WKND-site Gegenereerd door de module ui.frontendclientlib-dependenciesSluit om het even welke derdegebiedsdelen in Gegenereerd door de module ui.frontend -
Let op:
clientlib-siteenclientlib-dependenciesworden genegeerd vanuit bronbesturing. Dit is door ontwerp, aangezien deze bij bouwstijltijd door deui.frontendmodule 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 Sass of TypeScript . Er zijn verscheidene open-bronhulpmiddelen zoals NPM en webpack die 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.scssis het ingangspunt voor de dossiers van de Klasse in deui.frontendmodule. 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.scssis 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.scssen een reguliere expressie voor het verzamelen van.js- of.ts-bestanden in het project. Dit ingangspunt wordt gebruikt door de dossiers van de webpakconfiguratie als ingangspunt voor de volledigeui.frontendmodule. -
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,mainenfooter. Deze elementen van HTML werden bepaald door beleid in het vorige hoofdstuk Pagina's en Malplaatjes . -
Vouw de map
componentsondersrc/main/webpackuit en inspecteer de bestanden.
Elk dossier brengt aan een Component van de Kern zoals de Component van de Accordeon in kaart. Elke Component van de Kern wordt gebouwd met Modifier van het Element van het Blok of BEM aantekening om het gemakkelijker te maken om specifieke CSS klassen met stijlregels te richten. De bestanden onder
/componentszijn 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/srcmet 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-generator neemt 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 installbevel:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm installnote note NOTE npm installhoeft slechts eenmaal te worden uitgevoerd, net als na een nieuwe kloon of generatie van het project. -
Open
ui.frontend/package.jsonen in het manuscripten begin bevel voegt--env writeToDisk=truetoe.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.frontendmodule en synchroniseert de veranderingen met AEM in http://localhost:4502 code 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 watchbevolkt 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.cssonderui.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-generator die de inhoud van/distin een cliëntbibliotheek omzet en het naar deui.appsmodule verplaatst. -
Inspecteer het dossier
site.cssin 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.cssdossier 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 .gitignoredossier 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 -PautoInstallSinglePackagewordt 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.frontendhet bestand:ui.frontend/src/main/webpack/site/_variables.scss. -
Werk de kleurvariabele
$brand-primarybij: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.dependenciesenwknd.siteworden 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=disabled en 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.clientlibseindpunt. 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 bezit van 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 Stijl 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.
Bekijk de gebeëindigde code op GitHub of 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-guides bewaarplaats.
- 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-server gebruikt 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.htmlin 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:8080 worden 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/contenten/etc.clientlibsworden 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+Cte 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