Librerie client e workflow front-end client-side-libraries
Scopri come le librerie o le clientlibs lato client vengono utilizzate per distribuire e gestire CSS e JavaScript per un’implementazione di Adobe Experience Manager (AEM) Sites. Questo tutorial illustra anche come integrare il modulo ui.frontend, un progetto webpack separato, nel processo di build end-to-end.
Prerequisiti prerequisites
Esaminare gli strumenti e le istruzioni necessari per configurare un ambiente di sviluppo locale.
Si consiglia inoltre di rivedere l'esercitazione sulle nozioni di base dei componenti per comprendere le nozioni di base delle librerie lato client e di AEM.
Progetto iniziale
Consulta il codice della riga di base su cui si basa l’esercitazione:
-
Controlla il ramo
tutorial/client-side-libraries-start
da GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start
-
Implementa la base di codice in un’istanza AEM locale utilizzando le abilità Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE Se utilizzi AEM 6.5 o 6.4, aggiungi il profilo classic
a qualsiasi comando Maven.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
Puoi sempre visualizzare il codice finito su GitHub o estrarre il codice localmente passando al ramo tutorial/client-side-libraries-solution
.
Obiettivi
- Scopri in che modo le librerie lato client vengono incluse in una pagina tramite un modello modificabile.
- Scopri come utilizzare il modulo
ui.frontend
e un server di sviluppo Webpack per lo sviluppo front-end dedicato. - Comprendi il flusso di lavoro end-to-end per distribuire CSS e JavaScript compilati a un’implementazione di Sites.
Cosa intendi creare what-build
In questo capitolo, aggiungi alcuni stili di base per il sito WKND e il modello della pagina dell'articolo per avvicinare l'implementazione ai modelli di progettazione dell'interfaccia utente. Puoi utilizzare un flusso di lavoro front-end avanzato per integrare un progetto Webpack in una libreria client di AEM.
Pagina articolo con stili linea di base applicati
Informazioni di base background
Le librerie lato client forniscono un meccanismo per organizzare e gestire i file CSS e JavaScript necessari per un’implementazione AEM Sites. Gli obiettivi di base per le librerie lato client o clientlibs sono:
- Memorizza CSS/JS in piccoli file discreti per facilitarne lo sviluppo e la manutenzione
- Gestire le dipendenze da framework di terze parti in modo organizzato
- Riduci al minimo il numero di richieste lato client concatenando CSS/JS in una o due richieste.
Ulteriori informazioni sull'utilizzo di Librerie lato client sono disponibili qui.
Le librerie lato client presentano alcune limitazioni. In particolare, è un supporto limitato per i linguaggi front-end più popolari come Sass, LESS e TypeScript. Nell'esercitazione, vediamo in che modo il modulo ui.frontend può contribuire a risolvere questo problema.
Distribuisci la base di codice iniziale in un'istanza AEM locale e passa a http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html. Questa pagina non è formattata. Implementiamo le librerie lato client per il brand WKND per aggiungere CSS e JavaScript alla pagina.
Organizzazione delle librerie lato client organization
Esaminiamo ora l'organizzazione delle clientlibs generate da Archetipo progetto AEM.
Diagramma di alto livello: organizzazione della libreria lato client e inclusione delle pagine
-
Utilizzando VSCode o un altro IDE, apri il modulo ui.apps.
-
Espandere il percorso
/apps/wknd/clientlibs
per visualizzare le clientlibs generate dall'archetipo.Nella sezione seguente, queste clientlibs sono esaminate in maggiore dettaglio.
-
Nella tabella seguente sono riepilogate le librerie client. Ulteriori dettagli su incluse le librerie client sono disponibili qui.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Nome Descrizione Note clientlib-base
Livello base di CSS e JavaScript necessario per il funzionamento del sito WKND incorpora le librerie client dei Componenti core clientlib-grid
Genera il file CSS necessario per il funzionamento della modalità Layout. I punti di interruzione per dispositivi mobili/tablet possono essere configurati qui clientlib-site
Contiene il tema specifico per il sito WKND Generato dal modulo ui.frontend
clientlib-dependencies
Incorpora qualsiasi dipendenza di terze parti Generato dal modulo ui.frontend
-
Si noti che
clientlib-site
eclientlib-dependencies
vengono ignorati dal controllo del codice sorgente. Questo è per progettazione, poiché questi sono generati in fase di build dal moduloui.frontend
.
Aggiorna stili di base base-styles
Aggiornare quindi gli stili di base definiti nel modulo ui.frontend. I file nel modulo ui.frontend
generano le librerie clientlib-site
e clientlib-dependecies
che contengono il tema del sito ed eventuali dipendenze di terze parti.
Le librerie lato client non supportano linguaggi più avanzati come Sass o TypeScript. Esistono diversi strumenti open source come NPM e webpack che accelerano e ottimizzano lo sviluppo front-end. L'obiettivo del modulo ui.frontend è quello di poter utilizzare questi strumenti per gestire la maggior parte dei file di origine front-end.
-
Apri il modulo ui.frontend e passa a
src/main/webpack/site
. -
Apri il file
main.scss
main.scss
è il punto di ingresso ai file Sass nel moduloui.frontend
. Include il file_variables.scss
, che contiene una serie di variabili del brand da utilizzare nei diversi file Sass del progetto. Il file_base.scss
è incluso e definisce alcuni stili di base per gli elementi HTML. Un'espressione regolare include gli stili dei singoli componenti insrc/main/webpack/components
. Un'altra espressione regolare include i file insrc/main/webpack/site/styles
. -
Controllare il file
main.ts
. Includemain.scss
e un'espressione regolare per raccogliere qualsiasi file.js
o.ts
nel progetto. Questo punto di ingresso viene utilizzato dai file di configurazione Webpack come punto di ingresso per l'intero moduloui.frontend
. -
Esaminare i file sotto
src/main/webpack/site/styles
:Questi file contengono stili per gli elementi globali del modello, come il contenitore Intestazione, Piè di pagina e Contenuto principale. Le regole CSS in questi file hanno come destinazione diversi elementi HTML
header
,main
efooter
. Questi elementi di HTML sono stati definiti dai criteri del precedente capitolo Pagine e modelli. -
Espandere la cartella
components
insrc/main/webpack
ed esaminare i file.Ogni file è associato a un componente core come Componente Pannello a soffietto. Ogni Componente core è generato con Block Element Modifier o notazione BEM per semplificare il targeting di classi CSS specifiche con regole di stile. I file sotto
/components
sono stati sottoposti a stubb da Archetipo progetto AEM con diverse regole BEM per ogni componente. -
Scarica il file WKND Base Styles wknd-base-styles-src-v3.zip e unzip.
Per accelerare l’esercitazione, vengono forniti diversi file Sass che implementano il brand WKND in base ai Componenti core e alla struttura del modello per pagina dell’articolo.
-
Sovrascrivere il contenuto di
ui.frontend/src
con i file del passaggio precedente. Il contenuto del file ZIP deve sovrascrivere le seguenti cartelle:code language-plain /src/main/webpack /components /resources /site /static
Ispeziona i file modificati per visualizzare i dettagli dell’implementazione dello stile WKND.
Controllare l’integrazione ui.frontend ui-frontend-integration
Elemento di integrazione chiave incorporato nel modulo ui.frontend, aem-clientlib-generator prende gli artefatti CSS e JS compilati da un progetto webpack/npm e li trasforma in librerie lato client di AEM.
L’Archetipo progetto AEM imposta automaticamente questa integrazione. Quindi, esplora come funziona.
-
Aprire un terminale della riga di comando e installare il modulo ui.frontend utilizzando il comando
npm install
:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm install
note note NOTE L'esecuzione di npm install
è necessaria una sola volta, ad esempio dopo un nuovo clone o una nuova generazione del progetto. -
Apri
ui.frontend/package.json
e nel script start aggiungi il comando--env writeToDisk=true
.code language-json { "scripts": { "start": "webpack-dev-server --open --config ./webpack.dev.js --env writeToDisk=true", } }
-
Avvia il server di sviluppo Webpack in modalità watch eseguendo il comando seguente:
code language-shell $ npm run watch
-
In questo modo vengono compilati i file di origine dal modulo
ui.frontend
e le modifiche vengono sincronizzate con 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
-
Il comando
npm run watch
popola infine il clientlib-site e le clientlib-dependencies nel modulo ui.apps, che viene quindi sincronizzato automaticamente con AEM.note note NOTE Esiste anche un profilo npm run prod
che minimizza JS e CSS. Questa è la compilazione standard ogni volta che la build del webpack viene attivata tramite Maven. Ulteriori dettagli sul modulo ui.frontend sono disponibili qui. -
Controllare il file
site.css
sottoui.frontend/dist/clientlib-site/site.css
. Si tratta del CSS compilato basato sui file di origine Sass. -
Controllare il file
ui.frontend/clientlib.config.js
. Questo è il file di configurazione per un plug-in npm, aem-clientlib-generator, che trasforma il contenuto di/dist
in una libreria client e lo sposta nel moduloui.apps
. -
Controllare il file
site.css
nel modulo ui.apps inui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css
. Deve essere una copia identica del filesite.css
dal modulo ui.frontend. Ora che si trova nel modulo ui.apps, può essere distribuito ad AEM.note note NOTE Poiché clientlib-site viene compilato durante il tempo di compilazione, utilizzando npm o maven, può essere ignorato dal controllo del codice sorgente nel modulo ui.apps. Controllare il file .gitignore
sotto ui.apps. -
Apri l'articolo LA Skatepark in AEM all'indirizzo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
Ora dovresti vedere gli stili aggiornati per l’articolo. Per cancellare i file CSS memorizzati nella cache dal browser potrebbe essere necessario eseguire un aggiornamento rapido.
Sta iniziando a sembrare molto più vicino ai modelli!
note note NOTE I passaggi eseguiti in precedenza per generare e distribuire il codice ui.frontend in AEM vengono eseguiti automaticamente quando viene attivata una build Maven dalla radice del progetto mvn clean install -PautoInstallSinglePackage
.
Modifica dello stile
Apportare quindi una piccola modifica al modulo ui.frontend
per visualizzare npm run watch
e distribuire automaticamente gli stili all'istanza AEM locale.
-
Dal modulo
ui.frontend
aprire il file:ui.frontend/src/main/webpack/site/_variables.scss
. -
Aggiorna la variabile di colore
$brand-primary
:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;
Salva le modifiche.
-
Torna al browser e aggiorna la pagina AEM per visualizzare gli aggiornamenti:
-
Ripristinare la modifica al colore
$brand-primary
e arrestare la compilazione del webpack utilizzando il comandoCTRL+C
.
Inclusione di pagine e modelli page-inclusion
Quindi, esaminiamo come si fa riferimento alle clientlibs nella pagina di AEM. Una best practice comune nello sviluppo web consiste nell'includere CSS nell'intestazione HTML <head>
e nel JavaScript immediatamente prima di chiudere il tag </body>
.
-
Passa al modello per pagina articolo in http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html
-
Fai clic sull'icona Informazioni pagina e nel menu seleziona Criterio pagina per aprire la finestra di dialogo Criterio pagina.
Informazioni pagina > Criterio pagina
-
Le categorie per
wknd.dependencies
ewknd.site
sono elencate qui. Per impostazione predefinita, le clientlibs configurate tramite Criterio pagina vengono suddivise in modo da includere il CSS nell’intestazione della pagina e il JavaScript alla fine del corpo. Puoi elencare esplicitamente la libreria client JavaScript da caricare nell’intestazione della pagina. Questo è il caso diwknd.dependencies
.note note NOTE È inoltre possibile fare riferimento direttamente a wknd.site
owknd.dependencies
dal componente page, utilizzando lo scriptcustomheaderlibs.html
ocustomfooterlibs.html
. L’utilizzo del modello offre flessibilità in quanto consente di scegliere quali clientlibs utilizzare per il modello. Ad esempio, se disponi di una libreria JavaScript pesante che verrà utilizzata solo su un modello selezionato. -
Passa alla pagina La Skateparks creata utilizzando il modello pagina articolo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
-
Fai clic sull'icona Informazioni pagina e nel menu seleziona Visualizza come pubblicato per aprire la pagina dell'articolo all'esterno dell'editor di AEM.
-
Visualizza l'origine Pagina di http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled e dovresti essere in grado di visualizzare i seguenti riferimenti clientlib in
<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>
Notare che clientlibs sta utilizzando l'endpoint proxy
/etc.clientlibs
. Dovresti inoltre notare che la seguente libreria client include nella parte inferiore della pagina: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 In AEM 6.5/6.4 le librerie lato client non vengono minimizzate automaticamente. Consulta la documentazione su Gestione librerie HTML per abilitare la minimizzazione (consigliata). note warning WARNING Per quanto riguarda la pubblicazione, è fondamentale che le librerie client siano non servite da /app, in quanto questo percorso deve essere limitato per motivi di sicurezza utilizzando la sezione filtro Dispatcher. La proprietà allowProxy della libreria client assicura che CSS e JS siano serviti da /etc.clientlibs.
Passaggi successivi next-steps
Scopri come implementare singoli stili e riutilizzare i Componenti core utilizzando il sistema di stili di Experience Manager. Sviluppare con il sistema di stili include l'utilizzo del sistema di stili per estendere i componenti core con CSS specifici per il brand e configurazioni di criteri avanzate dell'Editor modelli.
Visualizza il codice finito in GitHub oppure rivedi e distribuisci il codice localmente in nel ramo Git tutorial/client-side-libraries-solution
.
- Clona l'archivio github.com/adobe/aem-wknd-guides.
- Controllare il ramo
tutorial/client-side-libraries-solution
.
Strumenti e risorse aggiuntivi additional-resources
Webpack DevServer - Markup statico webpack-dev-static
Nella coppia di esercizi precedente, diversi file Sass nel modulo ui.frontend sono stati aggiornati e attraverso un processo di compilazione, alla fine vedi che queste modifiche si riflettono in AEM. Esaminiamo ora una tecnica che utilizza un webpack-dev-server per sviluppare rapidamente gli stili front-end rispetto a static HTML.
Questa tecnica è utile se la maggior parte degli stili e del codice front-end viene eseguita da uno sviluppatore front-end dedicato che potrebbe non avere un facile accesso a un ambiente AEM. Questa tecnica consente inoltre alla FED di apportare modifiche direttamente a HTML, che possono quindi essere consegnate a uno sviluppatore AEM per implementarle come componenti.
-
Copia l'origine della pagina dell'articolo di skatepark LA all'indirizzo http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.
-
Riapri l’IDE. Incolla il markup copiato da AEM in
index.html
nel modulo ui.frontend sottosrc/main/webpack/static
. -
Modifica il markup copiato e rimuovi eventuali riferimenti a clientlib-site e clientlib-dependencies:
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>
Rimuovi questi riferimenti perché il server di sviluppo Webpack genera automaticamente questi artefatti.
-
Avvia il server di sviluppo Webpack da un nuovo terminale eseguendo il comando seguente dal modulo 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
-
Verrà aperta una nuova finestra del browser in http://localhost:8080/ con markup statico.
-
Modificare il file
src/main/webpack/site/_variables.scss
. Sostituire la regola$text-color
con quanto segue:code language-diff - $text-color: $black; + $text-color: $pink;
Salva le modifiche.
-
Dovresti vedere automaticamente le modifiche riflesse nel browser su http://localhost:8080.
-
Esaminare il file
/aem-guides-wknd.ui.frontend/webpack.dev.js
. Contiene la configurazione del webpack utilizzata per avviare il webpack-dev-server. Esegue il proxy dei percorsi/content
e/etc.clientlibs
da un'istanza di AEM in esecuzione locale. In questo modo vengono rese disponibili le immagini e altre clientlibs (non gestite dal codice ui.frontend).note caution CAUTION L’SRC immagine del markup statico punta a un componente immagine live in un’istanza AEM locale. Le immagini appaiono interrotte se il percorso cambia, se AEM non viene avviato o se il browser non ha effettuato l’accesso all’istanza AEM locale. Se si consegna a una risorsa esterna, è anche possibile sostituire le immagini con riferimenti statici. -
È possibile arrestare il server Webpack dalla riga di comando digitando
CTRL+C
.
Debug delle librerie lato client debugging-clientlibs
Se si utilizzano metodi diversi di categorie e incorpora per includere più librerie client, la risoluzione dei problemi può risultare laboriosa. AEM espone diversi strumenti per facilitare questa fase. Uno degli strumenti più importanti è Ricostruisci librerie client che forza AEM a ricompilare eventuali file LESS e generare il CSS.
-
Dump librerie - Elenca le librerie client registrate nell'istanza AEM.
<host>/libs/granite/ui/content/dumplibs.html
-
Output di test - consente a un utente di visualizzare l'output HTML previsto di clientlib include in base alla categoria.
<host>/libs/granite/ui/content/dumplibs.test.html
-
Convalida dipendenze librerie - evidenzia le dipendenze o le categorie incorporate che non è possibile trovare.
<host>/libs/granite/ui/content/dumplibs.validate.html
-
Rigenera librerie client - consente a un utente di forzare AEM a rigenerare le librerie client o a invalidare la cache delle librerie client. Questo strumento è efficace per lo sviluppo con LESS, in quanto può costringere AEM a ricompilare i CSS generati. In generale, è più efficace annullare la validità delle cache ed eseguire quindi l’aggiornamento di una pagina anziché ricostruire le librerie.
<host>/libs/granite/ui/content/dumplibs.rebuild.html