Librerie client e flusso di lavoro 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
Esamina gli strumenti e le istruzioni necessari per configurare un ambiente di sviluppo locale.
Consigliamo inoltre di rivedere il tutorial sulle nozioni di base dei componenti per comprendere le nozioni di base delle librerie lato client e di AEM.
Progetto iniziale
Controlla il codice della riga di base su cui si fonda l’esercitazione:
-
Controlla il ramo
tutorial/client-side-libraries-startda GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start -
Distribuisci la base di codice in un’istanza AEM locale utilizzando le abilità Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackagenote note NOTE Se utilizzi AEM 6.5 o 6.4, aggiungi il profilo classica qualsiasi comando Maven.code language-shell $ mvn clean install -PautoInstallSinglePackage -Pclassic
Puoi sempre visualizzare il codice finito su GitHub o estrarlo 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.frontende un server di sviluppo Webpack per lo sviluppo front-end dedicato. - Scopri il flusso di lavoro end-to-end per distribuire CSS e JavaScript compilati a un’implementazione di Sites.
Cosa stai per creare what-build
In questo capitolo, aggiungi alcuni stili linea 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
Esperienza pregressa 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:
- Archiviare CSS/JS in piccoli file discreti per facilitarne lo sviluppo e la manutenzione
- Gestire le dipendenze da framework di terze parti in modo organizzato
- Ridurre 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, si tratta di un supporto limitato per i linguaggi front-end più popolari come Sass, LESS e TypeScript. Nel tutorial, 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.
-
Espandi il percorso
/apps/wknd/clientlibsper 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 sull’abilitazione degli endpoint GraphQL si trovano qui.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 Nome Descrizione Note clientlib-baseLivello base di CSS e JavaScript necessario per il funzionamento del sito WKND incorpora le librerie client dei Componenti core clientlib-gridGenera il file CSS necessario per il funzionamento della modalità Layout. I punti di interruzione per dispositivi mobili/tablet possono essere configurati qui clientlib-siteContiene il tema specifico per il sito WKND Generato dal modulo ui.frontendclientlib-dependenciesIncorpora qualsiasi dipendenza di terze parti Generato dal modulo ui.frontend -
Notare che
clientlib-siteeclientlib-dependenciesvengono ignorati dal controllo sorgente. Questo è per progettazione, poiché questi sono generati in fase di build dal moduloui.frontend.
Aggiorna stili di base base-styles
Aggiorna 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 in
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è anche 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. -
Esamina il file
main.ts. Includemain.scsse un’espressione regolare per raccogliere qualsiasi file.jso.tsnel progetto. Questo punto di ingresso viene utilizzato dai file di configurazione Webpack come punto di ingresso per l’intero moduloui.frontend. -
Esamina i file in
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,mainefooter. Questi elementi HTML sono stati definiti dai criteri del precedente capitolo Pagine e modelli. -
Espandi la cartella
componentsinsrc/main/webpacked esamina 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 rendere più semplice destinare classi CSS specifiche con regole di stile. I file in
/componentssono stati eliminati da Archetipo progetto AEM con diverse regole BEM per ogni componente. -
Scarica il file di Stili della linea base di WKND wknd-base-styles-src-v3.zip e decomprimilo.
Per accelerare il tutorial, vengono forniti diversi file Sass che implementano il brand WKND in base ai Componenti core e la struttura del modello per pagina dell’articolo.
-
Sovrascrivi il contenuto di
ui.frontend/srccon 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.
Ispezionare l'integrazione ui.frontend ui-frontend-integration
Un 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.
-
Apri un terminale della riga di comando e installa il modulo ui.frontend utilizzando il comando
npm install:code language-shell $ cd ~/code/aem-guides-wknd/ui.frontend $ npm installnote note NOTE L’esecuzione di npm installè necessaria una sola volta, ad esempio dopo un nuova clonazione o generazione del progetto. -
Apri
ui.frontend/package.jsone nel comando script inizio aggiungi--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à guadra eseguendo questo comando:
code language-shell $ npm run watch -
Compila i file di origine dal modulo
ui.frontende sincronizza le modifiche 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 watchpopola infine clientlib-site e clientlib-dependencies nel modulo ui.apps, che viene quindi sincronizzato automaticamente con AEM.note note NOTE Esiste anche un profilo npm run prodche minimizza JS e CSS. Questa è la compilazione standard ogni volta che la generazione del webpack viene attivata tramite Maven. Ulteriori dettagli sul modulo ui.frontend sono disponibili qui. -
Ispeziona il file
site.csssottoui.frontend/dist/clientlib-site/site.css. Si tratta del CSS compilato basato sui file di origine Sass.
-
Ispeziona 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/distin una libreria client e lo sposta nel moduloui.apps. -
Ispeziona il file
site.cssnel 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.cssdal 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. Ispezionare il file .gitignoresotto ui.apps. -
Aprire l'articolo LA Skatepark in AEM all'indirizzo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
Ora dovrebbero essere visibili gli stili aggiornati per l'articolo. Per cancellare i file CSS memorizzati nella cache dal browser potrebbe essere necessario eseguire un aggiornamento rapido.
Comincia ad assomigliare sempre più 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 ui.frontend modulo per visualizzare npm run watch e distribuire automaticamente gli stili all'istanza AEM locale.
-
Dal modulo
ui.frontendaprire il file:ui.frontend/src/main/webpack/site/_variables.scss. -
Aggiornare la variabile di colore
$brand-primary:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;Salvare le modifiche.
-
Torna al browser e aggiorna la pagina AEM per visualizzare gli aggiornamenti:
-
Ripristina la modifica al colore
$brand-primarye arresta la generazione del webpack utilizzando il comandoCTRL+C.
Inclusione di pagine e modelli page-inclusion
Ora 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 la Pagina articolo all'indirizzo 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.dependenciesewknd.sitesono 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 clientlib JavaScript da caricare nell'intestazione della pagina. Questo è il caso diwknd.dependencies.
note note NOTE È inoltre possibile fare riferimento direttamente a wknd.siteowknd.dependenciesdal componente pagina, utilizzando lo scriptcustomheaderlibs.htmlocustomfooterlibs.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>Il 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 /apps, 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. Sviluppo 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 nel ramo Git tutorial/client-side-libraries-solution.
- Clona l'archivio github.com/adobe/aem-wknd-guides.
- Controlla il ramo
tutorial/client-side-libraries-solution.
Strumenti e riferimenti 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 ad HTML statico.
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 all'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.htmlnel 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.
-
Modifica il file
src/main/webpack/site/_variables.scss. Sostituisci la regola$text-colorcon quanto segue:code language-diff - $text-color: $black; + $text-color: $pink;Salvare le modifiche.
-
Dovresti vedere automaticamente le modifiche riflesse nel browser su http://localhost:8080.
-
Salva 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/contente/etc.clientlibsda 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 la consegna è verso 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 è Rigenera librerie client che forza AEM a ricompilare eventuali file LESS e generare il CSS.
-
Librerie dump - 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 incluse 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é rigenerare le librerie.
<host>/libs/granite/ui/content/dumplibs.rebuild.html