AEM Project Archetype innehåller en dedikerad front-end-konstruktionsmekanism som bygger på WebPack som tillval. Modulen ui.front blir alltså den centrala platsen för alla projektets frontresurser, inklusive JavaScript- och CSS-filer. För att till fullo kunna utnyttja denna användbara och flexibla funktion är det viktigt att förstå hur frontendutvecklingen passar in i ett AEM projekt.
I betydligt förenklade termer kan man tänka sig att AEM projekt består av två separata men sammanhörande delar:
Eftersom dessa två utvecklingsprocesser är inriktade på olika delar av projektet kan både back-end och front-end-utveckling ske parallellt.
Alla resulterande projekt måste dock använda resultatet från båda dessa utvecklingssatsningar, dvs. både back end och front end.
Körs npm run dev
startar frontendkonstruktionsprocessen som samlar JavaScript- och CSS-filer som lagras i modulen ui.front och skapar två minifierade klientbibliotek eller ClientLibs som anropas clientlib-site
och clientlib-dependencies
och placerar dem i modulen ui.apps. ClientLibs kan distribueras för att AEM och tillåta dig att lagra din klientkod i databasen.
När hela AEM projekttyp körs med mvn clean install -PautoInstallPackage
alla projektartefakter inklusive ClientLibs skickas sedan till AEM.
Läs mer om hur AEM hanterar ClientLibs i AEM, hur inkludera demeller se nedan hur modulen ui.front använder dem.
Framtöjningsmodulen är tillgänglig med en AEM ClientLib. När NPM-byggskriptet körs skapas appen och paketet aem-clientlib-generator tar det resulterande byggresultatet och omvandlar det till en sådan ClientLib.
En ClientLib består av följande filer och kataloger:
css/
: CSS-filer som kan begäras i HTMLcss.txt
: AEM ordning och namn på filer i css/
så att de kan sammanfogasjs/
: JavaScript-filer som kan begäras i HTMLjs.txt
AEM ordning och namn på filer i js/
så att de kan sammanfogasresources/
: Källmappningar, kodsegment som inte är ingångspunkter (till följd av koddelning), statiska resurser (t.ex. ikoner) osv.Framtidsmodulen är ett användbart och mycket flexibelt verktyg, men har ingen särskild åsikt om hur den ska användas. Följande är två exempel på möjligt -användning, men dina individuella projektbehov kan påverka andra användningsmodeller.
Med Webpack kan du utforma och utveckla baserat på statiska utdata från AEM webbsidor i modulen ui.front.
wcmmode=disabled
i URL:ennpm run dev
för att generera ClientLibsI det här flödet kan en AEM utföra steg ett och två och skicka det statiska HTML vidare till den frontendutvecklare som utvecklar baserat på utdata från AEM HTML.
Man kan också utnyttja Komponentbibliotek för att hämta exempel på markeringsutdata för varje komponent för att fungera på komponentnivå i stället för på sidnivå.
Använda Storybook kan du utföra mer atomiska framtagningsfunktioner. Även om Storybook inte ingår i AEM Project Archetype kan du installera den och lagra dina Storybook-artefakter i modulen ui.front. När de är klara för testning i AEM kan de distribueras som ClientLibs genom att köra npm run dev
.
Storybook ingår inte i AEM Project Archetype. Om du väljer att använda den måste du installera den separat.
Oavsett vilket utvecklingsarbetsflöde ni bestämmer er för att implementera för projektet måste backend-utvecklarna och front end-utvecklarna först komma överens om koden. AEM definierar vanligtvis koden, som tillhandahålls av kärnkomponenterna. Detta kan dock anpassas vid behov.
AEM Project Archetype innehåller en dedikerad front-end-konstruktionsmekanism som är baserad på Webpack med följande funktioner.
/clientlib/js
, /clientlib/css
, eller /clientlib/scss
.content.xml
eller js.txt
/css.txt
filer behövs när allt körs via Webpack./component/
mapp.
sites.js
och vendors.js
.site.js
och site.css
in /clientlib-site
och dependencies.js
och dependencies.css
in /clientlib-dependencies
Mer teknisk information om modulen ui.front finns i dokumentation om GitHub.
npm install
.Du måste ha kör arketype med alternativet -DoptionIncludeFrontendModule=y
för att fylla mappen ui.front.
Följande nPM-skript driver arbetsflödet framåt:
npm run dev
- fullständigt bygge med JS-optimering inaktiverad (trädskakning osv.) och källmappningar aktiverade och CSS-optimering inaktiverad.npm run prod
- fullständigt bygge med JS-optimering aktiverad (trädskakning osv.), källmappningar inaktiverade och CSS-optimering aktiverad.npm run start
- Startar en statisk webbpaketsutvecklingsserver för lokal utveckling med minimalt AEM.Modulen ui.front kompilerar koden under ui.frontend/src
och matar ut kompilerad CSS och JS samt eventuella resurser under en mapp med namnet ui.frontend/dist
.
site.js
, site.css
och resources/
mapp för layoutberoende bilder och teckensnitt skapas i en dist/
mapp för clientlib-plats.dependencies.js
och dependencies.css
skapas i en dist/clientlib-dependencies
mapp.Det första byggalternativet använder konfigureringsfiler för enbart dev och endast prod, som delar en gemensam konfigurationsfil. På så sätt kan utvecklings- och produktionsinställningarna ändras oberoende av varandra.
Ui.front-modulens byggprocess utnyttjar aem-clientlib-generator plugin-program för att flytta kompilerad CSS, JS och eventuella resurser till modulen ui.apps. Konfigurationen för aem-clientlib-generator definieras i clientlib.config.js
. Följande klientbibliotek genereras:
ui.apps/src/main/content/jcr_root/apps/<app>/clientlibs/clientlib-site
ui.apps/src/main/content/jcr_root/apps/<app>/clientlibs/clientlib-dependencies
clientlib-site
och clientlib-dependencies
kategorierna inkluderas på sidorna via Konfiguration av sidprofil som en del av standardmallen. Om du vill visa profilen redigerar du Innehållssidmall > Sidinformation > Sidprofil.
Klientbibliotek på webbplatssidan inkluderas slutligen på följande sätt:
<HTML>
<head>
<link rel="stylesheet" href="clientlib-base.css" type="text/css">
<script type="text/javascript" src="clientlib-dependencies.js"></script>
<link rel="stylesheet" href="clientlib-dependencies.css" type="text/css">
<link rel="stylesheet" href="clientlib-site.css" type="text/css">
</head>
<body>
....
<script type="text/javascript" src="clientlib-site.js"></script>
<script type="text/javascript" src="clientlib-base.js"></script>
</body>
</HTML>
Ovanstående tillägg kan förstås ändras genom att man uppdaterar sidprofilen och/eller ändrar kategorierna och inbäddningsegenskaperna för respektive klientbibliotek.
I modulen ui.front ingår en webpack-dev-server som tillhandahåller direktladdning för snabb frontutveckling utanför AEM. Installationen utnyttjar pluginmodulen html-webpack-plugin för att automatiskt mata in CSS och JS som kompilerats från modulen ui.front i en statisk HTML-mall.
ui.frontend/webpack.dev.js
ui.frontend/src/main/webpack/static/index.html
ui.frontend/webpack.dev.js
.mvn -PautoInstallSinglePackage clean install
för att installera hela projektet i en AEM som körs på localhost:4502
.ui.frontend
mapp.npm run start
för att starta webbpaketets dev-server. När programmet har startats bör det öppna en webbläsare (localhost:8080
eller nästa tillgängliga port).Nu kan du ändra CSS-, JS-, SCSS- och TS-filer och se ändringarna direkt på webbpaketets dev-server.