Klientbibliotek och arbetsflöde client-side-libraries
Lär dig hur bibliotek och klientbibliotek används för att distribuera och hantera CSS och JavaScript för en implementering av en Adobe Experience Manager (AEM) sajt. I den här självstudiekursen beskrivs även hur modulen ui.front, ett frikopplat webpack -projekt, kan integreras i hela byggprocessen.
Förutsättningar prerequisites
Granska de verktyg och instruktioner som krävs för att konfigurera en lokal utvecklingsmiljö.
Vi rekommenderar även att du går igenom självstudiekursen Grundläggande om komponenter för att förstå grunderna i klientbibliotek och AEM.
Startprojekt
Ta en titt på den baslinjekod som självstudiekursen bygger på:
-
Kolla in grenen
tutorial/client-side-libraries-start
från GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start
-
Distribuera kodbasen till en lokal AEM med dina Maven-kunskaper:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE Om du använder AEM 6.5 eller 6.4 lägger du till profilen classic
till eventuella Maven-kommandon.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
Du kan alltid visa den färdiga koden på GitHub eller checka ut koden lokalt genom att växla till grenen tutorial/client-side-libraries-solution
.
Mål
- Förstå hur klientbibliotek inkluderas på en sida via en redigerbar mall.
- Lär dig hur du använder modulen
ui.frontend
och en webbpaketsutvecklingsserver för dedikerad frontendutveckling. - Förstå hela arbetsflödet med att leverera kompilerad CSS och JavaScript till en webbplatsimplementering.
Vad du ska bygga what-build
I det här kapitlet lägger du till några baslinjeformat för WKND-webbplatsen och artikelsidmallen för att få implementeringen närmare gränssnittets designmodeller. Du använder ett avancerat frontendarbetsflöde för att integrera ett webbpaketprojekt i ett AEM klientbibliotek.
Artikelsida med baslinjeformat tillämpade
Bakgrund background
Med bibliotek på klientsidan kan du ordna och hantera CSS- och JavaScript-filer som behövs för en AEM Sites-implementering. De grundläggande målen för klientbibliotek och klientbibliotek är:
- Lagra CSS/JS i små diskreta filer för enklare utveckling och underhåll
- Hantera beroenden av ramverk från tredje part på ett organiserat sätt
- Minimera antalet klientförfrågningar genom att sammanfoga CSS/JS till en eller två förfrågningar.
Mer information om hur du använder klientbibliotek finns här.
Bibliotek på klientsidan har vissa begränsningar. Det viktigaste är ett begränsat stöd för populära språk som Sass, LESS och TypeScript. I självstudiekursen ska vi titta på hur modulen ui.front kan hjälpa till att lösa det här.
Distribuera startkodsbasen till en lokal AEM och navigera till http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html. Den här sidan är inte formaterad. Låt oss implementera bibliotek på klientsidan för WKND-varumärket för att lägga till CSS och JavaScript på sidan.
Biblioteksorganisation på klientsidan organization
Låt oss utforska organisationen av klienter som genereras av AEM Project Archetype.
Högnivådiagram Biblioteksorganisation på klientsidan och sidinkludering
-
Om du använder VSCode eller någon annan IDE öppnas modulen ui.apps.
-
Expandera sökvägen
/apps/wknd/clientlibs
om du vill visa de klientlibs som har genererats av typen architype.I avsnittet nedan finns mer information om dessa klientlibs.
-
I följande tabell sammanfattas klientbiblioteken. Mer information om inklusive klientbibliotek finns här.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Namn Beskrivning Anteckningar clientlib-base
Grundnivån för CSS och JavaScript krävs för att WKND-webbplatsen ska fungera inbäddar klientlibs för kärnkomponenten clientlib-grid
Genererar den CSS som krävs för att Layoutläge ska fungera. Brytpunkter för mobiler/surfplattor kan konfigureras här clientlib-site
Innehåller platsspecifikt tema för WKND-webbplatsen Genereras av modulen ui.frontend
clientlib-dependencies
Bäddar in eventuella beroenden från tredje part Genereras av modulen ui.frontend
-
Observera att
clientlib-site
ochclientlib-dependencies
ignoreras från källkontrollen. Detta är utformat eftersom dessa genereras vid byggtiden av modulenui.frontend
.
Uppdatera basformat base-styles
Uppdatera sedan basformaten som definierats i modulen ui.front. Filerna i modulen ui.frontend
genererar de clientlib-site
- och clientlib-dependecies
-bibliotek som innehåller platstemat och eventuella tredjepartsberoenden.
Klientbibliotek stöder inte mer avancerade språk som Sass eller TypeScript. Det finns flera verktyg med öppen källkod som NPM och webpack som snabbar upp och optimerar frontendutvecklingen. Målet med modulen ui.front är att kunna använda dessa verktyg för att hantera de flesta källfiler i gränssnittet.
-
Öppna modulen ui.front och navigera till
src/main/webpack/site
. -
Öppna filen
main.scss
main.scss
är startpunkten till Sass-filerna i modulenui.frontend
. Den innehåller filen_variables.scss
, som innehåller en serie varumärkesvariabler som ska användas i olika Sass-filer i projektet. Filen_base.scss
ingår också och definierar några grundläggande format för HTML-element. Ett reguljärt uttryck innehåller formaten för enskilda komponentformat undersrc/main/webpack/components
. Ett annat reguljärt uttryck innehåller filerna undersrc/main/webpack/site/styles
. -
Inspect filen
main.ts
. Det innehållermain.scss
och ett reguljärt uttryck för att samla in alla.js
- eller.ts
-filer i projektet. Den här startpunkten används av webbpaketets konfigurationsfiler som startpunkt för helaui.frontend
-modulen. -
Inspect filerna under
src/main/webpack/site/styles
:De här filerna formaterar för globala element i mallen, som sidhuvud, sidfot och behållare för huvudinnehåll. CSS-reglerna i de här filerna har olika HTML-element som mål
header
,main
ochfooter
. Dessa HTML-element definierades av principer i det föregående kapitlet Sidor och mallar. -
Expandera mappen
components
undersrc/main/webpack
och inspektera filerna.Varje fil mappar till en kärnkomponent som dragspelskomponenten. Varje kärnkomponent byggs med Blockelementsmodifierare eller BEM-notation för att göra det enklare att rikta in specifika CSS-klasser med formatregler. Filerna under
/components
har grupperats ut av den AEM projekttypen med olika BEM-regler för varje komponent. -
Hämta WKND-basformat wknd-base-styles-src-v3.zip och zip filen.
För att snabba upp självstudiekursen finns flera Sass-filer som implementerar WKND-varumärket baserat på kärnkomponenter och strukturen för artikelsidmallen.
-
Skriv över innehållet i
ui.frontend/src
med filer från föregående steg. Innehållet i zip-filen ska skriva över följande mappar:code language-plain /src/main/webpack /components /resources /site /static
Inspect de ändrade filerna för att se information om implementeringen av WKND-formatet.
Integrering av Inspect med ui.front ui-frontend-integration
En viktig integrationsbit som är inbyggd i modulen ui.front, aem-clientlib-generator, tar kompilerade CSS- och JS-artefakter från ett webpack/npm-projekt och omvandlar dem till AEM klientbibliotek.
AEM Project Archetype konfigurerar automatiskt den här integreringen. Utforska sedan hur det fungerar.
-
Öppna en kommandoradsterminal och installera modulen ui.front med kommandot
npm install
:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm install
note note NOTE npm install
-körning behövs bara en gång, som efter en ny klon eller generering av projektet. -
Öppna
ui.frontend/package.json
och lägg till--env writeToDisk=true
i kommandot scripts start.code language-json { "scripts": { "start": "webpack-dev-server --open --config ./webpack.dev.js --env writeToDisk=true", } }
-
Starta webbpaketets dev-server i läget watch genom att köra följande kommando:
code language-shell $ npm run watch
-
Detta kompilerar källfilerna från modulen
ui.frontend
och synkroniserar ändringarna med AEM på 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
-
Kommandot
npm run watch
fyller i clientlib-site och clientlib-beroenden i modulen ui.apps som sedan synkroniseras automatiskt med AEM.note note NOTE Det finns också en npm run prod
-profil som miniatyriserar JS och CSS. Detta är standardkompileringen när webbpaketsbygget utlöses via Maven. Mer information om modulen ui.front finns här. -
Inspect filen
site.css
underui.frontend/dist/clientlib-site/site.css
. Detta är den kompilerade CSS-koden som baseras på Sass-källfilerna. -
Inspect filen
ui.frontend/clientlib.config.js
. Detta är konfigurationsfilen för ett npm-plugin-program, aem-clientlib-generator, som omformar innehållet i/dist
till ett klientbibliotek och flyttar det till modulenui.apps
. -
Inspect filen
site.css
i modulen ui.apps påui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css
. Detta bör vara en identisk kopia av filensite.css
från modulen ui.front. Nu när den finns i modulen ui.apps kan den distribueras till AEM.note note NOTE Eftersom clientlib-site kompileras under byggtid, med antingen npm eller maven, kan den ignoreras från källkontrollen i modulen ui.apps. Inspect filen .gitignore
under ui.apps. -
Öppna LA Skatepark-artikeln i AEM: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
Du bör nu se de uppdaterade formaten för artikeln. Du kan behöva göra en hård uppdatering för att rensa alla CSS-filer som har cachelagrats i webbläsaren.
Det börjar se mycket närmare på mockonerna!
note note NOTE Stegen som utförs ovan för att skapa och distribuera ui.front-koden till AEM körs automatiskt när en Maven-bygge utlöses från roten för projektet mvn clean install -PautoInstallSinglePackage
.
Göra en formatändring
Gör sedan en liten ändring i modulen ui.frontend
för att se hur npm run watch
automatiskt distribuerar formaten till den lokala AEM.
-
Från öppnar modulen
ui.frontend
filen:ui.frontend/src/main/webpack/site/_variables.scss
. -
Uppdatera färgvariabeln
$brand-primary
:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;
Spara ändringarna.
-
Återgå till webbläsaren och uppdatera AEM för att se uppdateringarna:
-
Återställ ändringen av färgen
$brand-primary
och stoppa webbpaketsbygget med kommandotCTRL+C
.
Inkludering av sidor och mallar page-inclusion
Sedan tittar vi på hur du refererar till klippen på AEM. Ett vanligt tillvägagångssätt vid webbutveckling är att inkludera CSS i HTML Header <head>
och JavaScript precis innan du stänger </body>
-taggen.
-
Bläddra till mallen Artikelsida på http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html
-
Klicka på ikonen Sidinformation och välj Sidprofil på menyn för att öppna dialogrutan Sidprofil.
Sidinformation > Sidprofil
-
Observera att kategorierna för
wknd.dependencies
ochwknd.site
listas här. Som standard delas klienten som konfigurerats via sidprincipen upp så att CSS inkluderas i sidhuvudet och JavaScript i brödtexten. Du kan visa en explicit lista över det clientlib JavaScript som ska läsas in i sidhuvudet. Detta gällerwknd.dependencies
.note note NOTE Det går också att referera till wknd.site
ellerwknd.dependencies
från sidkomponenten direkt med skriptetcustomheaderlibs.html
ellercustomfooterlibs.html
. Mallen ger flexibilitet så att du kan välja vilka klipp som ska användas per mall. Om du t.ex. har ett stort JavaScript-bibliotek som bara ska användas på en viss mall. -
Navigera till sidan LA-skateparker som skapats med Artikelsidmallen: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
-
Klicka på ikonen Sidinformation och välj Visa som publicerad på menyn för att öppna artikelsidan utanför AEM.
-
Visa sidkällan för http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled och du bör kunna se följande klientlibbreferenser i
<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>
Observera att klientlibs använder proxyslutpunkten
/etc.clientlibs
. Du bör också se att följande clientlib finns längst ned på sidan: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 För AEM 6.5/6.4 är klientbiblioteken inte automatiskt minifierade. Se dokumentationen för bibliotekshanteraren HTML för att aktivera miniatyrbilder (rekommenderas). note warning WARNING På publiceringssidan är det viktigt att klientbiblioteken inte hanteras från /appar eftersom sökvägen bör begränsas av säkerhetsskäl med filteravsnittet Dispatcher. Egenskapen allowProxy i klientbiblioteket ser till att CSS och JS hanteras från /etc.clientlibs.
Nästa steg next-steps
Lär dig hur du implementerar enskilda format och återanvänder kärnkomponenter med Experience Manager Style System. Om du utvecklar med stilsystemet kan du använda stilsystemet för att utöka kärnkomponenter med varumärkesspecifik CSS och avancerade principkonfigurationer i mallredigeraren.
Visa den färdiga koden på GitHub eller granska och distribuera koden lokalt på Git-grenen tutorial/client-side-libraries-solution
.
- Klona github.com/adobe/aem-wknd-guides-databasen.
- Kolla in grenen
tutorial/client-side-libraries-solution
.
Ytterligare verktyg och resurser additional-resources
Webpack DevServer - statisk kod webpack-dev-static
I de föregående övningarna uppdaterades flera Sass-filer i modulen ui.front och genom en byggprocess kan du slutligen se att dessa ändringar återspeglas i AEM. Låt oss nu titta på en teknik som använder en webpack-dev-server för att snabbt utveckla front end-formaten mot static HTML.
Den här tekniken är användbar om de flesta format och frontkod utförs av en dedikerad Front-End-utvecklare som kanske inte har enkel åtkomst till en AEM. Med denna teknik kan FED även göra ändringar direkt på HTML, som sedan kan skickas vidare till en AEM som ska implementeras som komponenter.
-
Kopiera sidkällan för LA-skatepararartikelsidan på http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.
-
Öppna din IDE igen. Klistra in den kopierade markeringen från AEM i
index.html
i modulen ui.front undersrc/main/webpack/static
. -
Redigera den kopierade koden och ta bort alla referenser till clientlib-site och clientlib-beroenden:
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>
Ta bort dessa referenser eftersom webbpaketets dev-server automatiskt genererar dessa artefakter.
-
Starta webbpaketets dev-server från en ny terminal genom att köra följande kommando inifrån modulen ui.front:
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
-
Då öppnas ett nytt webbläsarfönster på http://localhost:8080/ med statisk kod.
-
Redigera filen
src/main/webpack/site/_variables.scss
. Ersätt regeln$text-color
med följande:code language-diff - $text-color: $black; + $text-color: $pink;
Spara ändringarna.
-
Ändringarna visas automatiskt i webbläsaren på http://localhost:8080.
-
Granska filen
/aem-guides-wknd.ui.frontend/webpack.dev.js
. Detta innehåller webbpaketskonfigurationen som används för att starta webbpack-dev-servern. Sökvägarna/content
och/etc.clientlibs
proxyservrar från en lokal instans av AEM som körs. Så här blir bilderna och andra klientlibs (som inte hanteras av koden ui.front ) tillgängliga.note caution CAUTION Den statiska markeringens bildresurs pekar på en aktiv bildkomponent i en lokal AEM. Bilder visas som brutna om sökvägen till bilden ändras, om AEM inte startas eller om webbläsaren inte har loggat in i den lokala AEM. Om du lämnar över till en extern resurs är det också möjligt att ersätta bilderna med statiska referenser. -
Du kan stoppa webbpaketservern från kommandoraden genom att skriva
CTRL+C
.
aemfed develop-aemfed
aemfed är ett kommandoradsverktyg med öppen källkod som kan användas för att snabba upp frontendutvecklingen. Den drivs av aemsync, Browsersync och Sling Log Tracer.
På en hög nivå är aemfed
utformad för att lyssna på filändringar i modulen ui.apps och automatiskt synkronisera dem direkt till en AEM som körs. Baserat på ändringarna uppdateras en lokal webbläsare automatiskt, vilket snabbar upp utvecklingen på frontend. Den är även utformad för att fungera med Sling Log Tracer för att automatiskt visa fel på serversidan direkt i terminalen.
Om du arbetar mycket med modulen ui.apps, ändrar HTML-skript och skapar anpassade komponenter kan emfed vara ett kraftfullt verktyg som du kan använda. Fullständig dokumentation finns här.
Felsöka bibliotek på klientsidan debugging-clientlibs
Olika metoder i kategorierna och bäddar in för att inkludera flera klientbibliotek kan vara besvärliga att felsöka. AEM visar flera verktyg som kan hjälpa dig med detta. Ett av de viktigaste verktygen är Återskapa klientbibliotek som tvingar AEM att kompilera om LESS-filer och generera CSS.
-
Dumpa bibliotek - Visar en lista över de klientbibliotek som registrerats i AEM.
<host>/libs/granite/ui/content/dumplibs.html
-
Testa utdata - gör det möjligt för en användare att se förväntade utdata från HTML för clientlib includes baserat på kategori.
<host>/libs/granite/ui/content/dumplibs.test.html
-
Verifiering av biblioteksberoenden - markerar beroenden eller inbäddade kategorier som inte kan hittas.
<host>/libs/granite/ui/content/dumplibs.validate.html
-
Återskapa klientbibliotek - gör att en användare kan tvinga AEM att återskapa klientbiblioteken eller göra cachen i klientbiblioteken ogiltig. Det här verktyget är effektivt när du utvecklar med LESS eftersom det kan tvinga AEM att kompilera om den genererade CSS-koden. I allmänhet är det effektivare att validera cacheminnen och sedan utföra en siduppdatering jämfört med att återskapa biblioteken.
<host>/libs/granite/ui/content/dumplibs.rebuild.html