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 dell'AEM.

Progetto iniziale

NOTE
Se hai completato correttamente il capitolo precedente, puoi riutilizzare il progetto e saltare i passaggi per estrarre il progetto iniziale.

Consulta il codice della riga di base su cui si basa l’esercitazione:

  1. Controlla il ramo tutorial/client-side-libraries-start da GitHub

    code language-shell
    $ cd aem-guides-wknd
    $ git checkout tutorial/client-side-libraries-start
    
  2. Implementa la base di codice in un’istanza AEM locale utilizzando le tue competenze 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

  1. Scopri in che modo le librerie lato client vengono incluse in una pagina tramite un modello modificabile.
  2. Scopri come utilizzare il modulo ui.frontend e un server di sviluppo Webpack per lo sviluppo front-end dedicato.
  3. 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 AEM.

Stili completati

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:

  1. Memorizza CSS/JS in piccoli file discreti per facilitarne lo sviluppo e la manutenzione
  2. Gestire le dipendenze da framework di terze parti in modo organizzato
  3. 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.

Distribuire la base di codice iniziale in un'istanza AEM locale e passare 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.

Organizzazione libreria client di alto livello

Diagramma di alto livello: organizzazione della libreria lato client e inclusione delle pagine

NOTE
La seguente organizzazione di librerie lato client è generata da Archetipo di progetto AEM ma rappresenta solo un punto di partenza. Il modo in cui un progetto gestisce e distribuisce CSS e JavaScript a un’implementazione di Sites può variare notevolmente in base a risorse, set di competenze e requisiti.
  1. Utilizzando VSCode o un altro IDE, apri il modulo ui.apps.

  2. Espandere il percorso /apps/wknd/clientlibs per visualizzare le clientlibs generate dall'archetipo.

    Clientlibs in ui.apps

    Nella sezione seguente, queste clientlibs sono esaminate in maggiore dettaglio.

  3. 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
  4. Si noti che clientlib-site e clientlib-dependencies vengono ignorati dal controllo del codice sorgente. Questo è per progettazione, poiché questi sono generati in fase di build dal modulo ui.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.

  1. Apri il modulo ui.frontend e passa a src/main/webpack/site.

  2. Apri il file main.scss

    main.scss - entrypoint

    main.scss è il punto di ingresso ai file Sass nel modulo ui.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 in src/main/webpack/components. Un'altra espressione regolare include i file in src/main/webpack/site/styles.

  3. Inspect il file main.ts. Include main.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 modulo ui.frontend.

  4. Inspect i file sotto src/main/webpack/site/styles:

    File di stile

    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 sono destinate a diversi elementi HTML header, main e footer. Questi elementi HTML sono stati definiti dai criteri del precedente capitolo Pagine e modelli.

  5. Espandere la cartella components in src/main/webpack ed esaminare i file.

    File Sass componenti

    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 di progetto AEM con diverse regole BEM per ogni componente.

  6. Scarica il file WKND Base Styles wknd-base-styles-src-v3.zip e unzip.

    Stili base WKND

    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.

  7. 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
    

    File modificati

    Per visualizzare i dettagli dell’implementazione dello stile WKND, Inspect ha modificato i file.

Integrazione ui.frontend in Inspect ui-frontend-integration

Un elemento di integrazione chiave integrato nel modulo ui.frontend, aem-clientlib-generator, prende gli artefatti CSS e JS compilati da un progetto webpack/npm e li trasforma in librerie AEM lato client.

integrazione dellarchitettura ui.frontend

L’Archetipo progetto AEM configura automaticamente questa integrazione. Quindi, esplora come funziona.

  1. 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.
  2. 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",
      }
    }
    
  3. Avvia il server di sviluppo Webpack in modalità watch eseguendo il comando seguente:

    code language-shell
    $ npm run watch
    
  4. Compila i file di origine dal modulo ui.frontend e sincronizza le modifiche con 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
    
  5. Il comando npm run watch popola infine il clientlib-site e le clientlib-dependencies nel modulo ui.apps, che viene quindi sincronizzato automaticamente con l'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.
  6. Inspect il file site.css sotto ui.frontend/dist/clientlib-site/site.css. Si tratta del CSS compilato basato sui file di origine Sass.

    CSS sito distribuito

  7. Inspect 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 modulo ui.apps.

  8. Inspect ha aggiunto il file site.css nel modulo ui.apps in ui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css. Deve essere una copia identica del file site.css dal modulo ui.frontend. Ora che si trova nel modulo ui.apps, può essere distribuito all'AEM.

    ui.apps clientlib-site

    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. Inspect il file .gitignore sotto ui.apps.
  9. Apri l'articolo LA Skatepark in AEM all'indirizzo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.

    Stili base aggiornati per larticolo

    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 sopra descritti 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

Quindi, apportare una piccola modifica al modulo ui.frontend per visualizzare npm run watch distribuire automaticamente gli stili all'istanza AEM locale.

  1. Dal modulo ui.frontend aprire il file: ui.frontend/src/main/webpack/site/_variables.scss.

  2. Aggiorna la variabile di colore $brand-primary:

    code language-scsss
    //== variables.css
    
    //== Brand Colors
    $brand-primary:          $pink;
    

    Salva le modifiche.

  3. Torna al browser e aggiorna la pagina AEM per visualizzare gli aggiornamenti:

    Librerie lato client

  4. Ripristinare la modifica al colore $brand-primary e arrestare la compilazione del webpack utilizzando il comando CTRL+C.

CAUTION
L'utilizzo del modulo ui.frontend potrebbe non essere necessario per tutti i progetti. Il modulo ui.frontend aggiunge ulteriore complessità e, se non è necessario o non si desidera utilizzare alcuni di questi strumenti front-end avanzati (Sass, webpack, npm…), potrebbe non essere necessario.

Inclusione di pagine e modelli page-inclusion

Quindi, esaminiamo come si fa riferimento alle clientlibs nella pagina AEM. Una best practice comune nello sviluppo web consiste nell'includere CSS nell'intestazione HTML <head> e in JavaScript subito prima di chiudere il tag </body>.

  1. Passa al modello per pagina articolo in http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html

  2. Fai clic sull'icona Informazioni pagina e nel menu seleziona Criterio pagina per aprire la finestra di dialogo Criterio pagina.

    Criterio pagina menu modello pagina articolo

    Informazioni pagina > Criterio pagina

  3. Le categorie per wknd.dependencies e wknd.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 di wknd.dependencies.

    Criterio pagina menu modello pagina articolo

    note note
    NOTE
    È inoltre possibile fare riferimento direttamente a wknd.site o wknd.dependencies dal componente page, utilizzando lo script customheaderlibs.html o customfooterlibs.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.
  4. 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.

  5. Fai clic sull'icona Informazioni pagina e nel menu seleziona Visualizza come pubblicato per aprire la pagina dell'articolo all'esterno dell'editor AEM.

    Visualizza come pubblicato

  6. 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
    Per AEM 6.5/6.4 le librerie lato client non vengono minimizzate automaticamente. Per abilitare la minimizzazione, consulta la documentazione su HTML Library Manager (scelta 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.

  1. Clona l'archivio github.com/adobe/aem-wknd-guides.
  2. 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 nell'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 alle HTML, che possono poi essere consegnate a uno sviluppatore AEM per implementarle come componenti.

  1. 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.

  2. Riapri l’IDE. Incolla il markup copiato da AEM in index.html nel modulo ui.frontend sotto src/main/webpack/static.

  3. 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.

  4. 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
    
  5. Verrà aperta una nuova finestra del browser in http://localhost:8080/ con markup statico.

  6. 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.

  7. Dovresti vedere automaticamente le modifiche riflesse nel browser su http://localhost:8080.

    Modifiche al server di sviluppo Webpack locale

  8. 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 dell'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 su un’istanza AEM locale. Le immagini appaiono interrotte se il percorso cambia, se l’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.
  9. È possibile arrestare il server Webpack dalla riga di comando digitando CTRL+C.

aemfed develop-aemfed

aemfed è uno strumento da riga di comando open-source che può essere utilizzato per velocizzare lo sviluppo front-end. È alimentato da aemsync, Browsersync e Sling Log Tracer.

A un livello avanzato, aemfedè progettato per ascoltare le modifiche dei file all'interno del modulo ui.apps e sincronizzarli automaticamente direttamente in un'istanza AEM in esecuzione. In base alle modifiche, un browser locale si aggiorna automaticamente, velocizzando così lo sviluppo front-end. È inoltre progettato per funzionare con Sling Log Tracer per visualizzare automaticamente eventuali errori lato server direttamente nel terminale.

Se lavori molto nel modulo ui.apps, modificando gli script HTL e creando componenti personalizzati, aemfed può essere uno strumento potente da utilizzare. La documentazione completa è disponibile qui.

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. L'AEM espone diversi strumenti per aiutarlo. Uno degli strumenti più importanti è Ricostruisci librerie client che obbliga l'AEM a ricompilare i 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 l'AEM a rigenerare le librerie client o invalidare la cache delle librerie client. Questo strumento è efficace quando si sviluppa con MENO in quanto può costringere l’AEM a ricompilare il CSS generato. 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

rigenera libreria client

recommendation-more-help
b2a561c1-47c0-4182-b8c1-757a197484f9