Bibliotecas de cliente y flujo de trabajo front-end client-side-libraries

Descubra cómo se utilizan las bibliotecas del lado del cliente o clientlibs para implementar y administrar CSS y JavaScript para una implementación de sitios de Adobe Experience Manager (AEM). Este tutorial también explica cómo se puede integrar el módulo ui.frontend, un proyecto webpack disociado, en el proceso de compilación de extremo a extremo.

Requisitos previos prerequisites

Revise las herramientas y las instrucciones necesarias para configurar un entorno de desarrollo local.

También se recomienda revisar el tutorial Conceptos básicos de componentes para comprender los aspectos básicos de las bibliotecas del lado del cliente y AEM.

Proyecto de inicio

NOTE
Si ha completado correctamente el capítulo anterior, puede volver a utilizar el proyecto y omitir los pasos para consultar el proyecto de inicio.

Consulte el código de línea de base en el que se basa el tutorial:

  1. Consulte la rama tutorial/client-side-libraries-start de GitHub

    code language-shell
    $ cd aem-guides-wknd
    $ git checkout tutorial/client-side-libraries-start
    
  2. Implemente una base de código en una instancia de AEM local usando sus conocimientos de Maven:

    code language-shell
    $ mvn clean install -PautoInstallSinglePackage
    
    note note
    NOTE
    Si utiliza AEM 6.5 o 6.4, anexe el perfil classic a cualquier comando de Maven.
    code language-shell
    $ mvn clean install -PautoInstallSinglePackage -Pclassic
    

Siempre puede ver el código terminado en GitHub o consultarlo localmente cambiando a la rama tutorial/client-side-libraries-solution.

Objetivos

  1. Comprenda cómo se incluyen las bibliotecas del lado del cliente en una página mediante una plantilla editable.
  2. Aprenda a utilizar el módulo ui.frontend y un servidor de desarrollo de Webpack para el desarrollo front-end dedicado.
  3. Comprenda el flujo de trabajo de extremo a extremo de ofrecer CSS y JavaScript compilados a una implementación de Sites.

Lo que va a generar what-build

En este capítulo, añade algunos estilos de línea de base para el sitio WKND y la plantilla de página de artículo para acercar la implementación a las maquetas de diseño de interfaz de usuario. Utilice un flujo de trabajo front-end avanzado para integrar un proyecto de Webpack en una biblioteca de cliente de AEM.

Estilos finalizados

Página de artículo con estilos de línea de base aplicados

Información general background

Las bibliotecas del lado del cliente proporcionan un mecanismo para organizar y administrar los archivos CSS y JavaScript necesarios para una implementación de AEM Sites. Los objetivos básicos de las bibliotecas del lado del cliente o clientlibs son:

  1. Almacenar CSS/JS en pequeños archivos discretos para facilitar el desarrollo y mantenimiento
  2. Administrar dependencias en marcos de terceros de forma organizada
  3. Minimizar el número de solicitudes del lado del cliente concatenando CSS/JS en una o dos solicitudes.

Encontrará más información sobre el uso de Bibliotecas del lado del cliente aquí.

Las bibliotecas del lado del cliente tienen algunas limitaciones. Lo más destacable es la compatibilidad limitada con los lenguajes de front-end populares como Sass, LESS y TypeScript. En el tutorial, veamos cómo el módulo ui.frontend puede ayudar a resolver esto.

Implemente el código de inicio base en una instancia local de AEM y vaya a http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html. Esta página no tiene estilo. Implementemos bibliotecas del lado del cliente para la marca WKND para añadir CSS y JavaScript a la página.

Organización de bibliotecas del lado del cliente organization

A continuación, vamos a explorar la organización de clientlibs generados por el arquetipo del proyecto de AEM.

Organización de la biblioteca de clientes de alto nivel

Diagrama de alto nivel de la organización del lado del cliente y la inclusión de páginas

NOTE
La siguiente organización de la biblioteca del lado del cliente la genera el tipo de archivo del proyecto de AEM, pero representa simplemente un punto de partida. La forma en que un proyecto administra y ofrece CSS y JavaScript en última instancia a una implementación de Sites puede variar considerablemente en función de los recursos, los conjuntos de habilidades y los requisitos.
  1. Si usa VSCode u otro IDE, abra el módulo ui.apps.

  2. Expanda la ruta /apps/wknd/clientlibs para ver los clientlibs generados por el tipo de archivo.

    Clientlibs en ui.apps

    En la sección siguiente, estos clientlibs se revisan con más detalle.

  3. La siguiente tabla resume las bibliotecas de cliente. Para obtener más información sobre , incluidas las bibliotecas de clientes, haga clic aquí.

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3
    Nombre Descripción Notas
    clientlib-base Nivel base de CSS y JavaScript necesario para que funcione el sitio WKND incrusta las bibliotecas de cliente de componentes principales
    clientlib-grid Genera el CSS necesario para que funcione el Modo de diseño. Los puntos de interrupción para móviles o tabletas se pueden configurar aquí
    clientlib-site Contiene el tema específico del sitio para el sitio WKND Generado por el módulo ui.frontend
    clientlib-dependencies Incrusta cualquier dependencia de terceros Generado por el módulo ui.frontend
  4. Observe que clientlib-site y clientlib-dependencies se omiten desde el control de código fuente. Esto es intencionado, ya que se generan en tiempo de compilación mediante el módulo ui.frontend.

Actualización de los estilos base base-styles

A continuación, actualice los estilos base definidos en el módulo ui.frontend. Los archivos del módulo ui.frontend generan las bibliotecas clientlib-site y clientlib-dependecies que contienen el tema del sitio y cualquier dependencia de terceros.

Las bibliotecas del lado cliente no admiten lenguajes más avanzados como Sass o TypeScript. Hay varias herramientas de código abierto como NPM y webpack que aceleran y optimizan el desarrollo front-end. El objetivo del módulo ui.frontend es poder usar estas herramientas para administrar la mayoría de los archivos de origen front-end.

  1. Abra el módulo ui.frontend y vaya a src/main/webpack/site.

  2. Abra el archivo main.scss

    main.scss - punto de entrada

    main.scss es el punto de entrada a los archivos Sass en el módulo ui.frontend. Incluye el archivo _variables.scss, que contiene una serie de variables de marca que se utilizarán en distintos archivos Sass del proyecto. El archivo _base.scss también se incluye y define algunos estilos básicos para los elementos HTML. Una expresión regular incluye los estilos para los estilos de componentes individuales en src/main/webpack/components. Otra expresión regular incluye los archivos bajo src/main/webpack/site/styles.

  3. Inspeccione el archivo main.ts. Incluye main.scss y una expresión regular para recopilar cualquier archivo de .js o .ts en el proyecto. Los archivos de configuración del webpack utilizan este punto de entrada como punto de entrada para todo el módulo ui.frontend.

  4. Inspeccione los archivos debajo de src/main/webpack/site/styles:

    Archivos de estilos

    Estos archivos contienen estilos para los elementos globales de la plantilla, como el encabezado, el pie de página y el contenedor de contenido principal. Las reglas CSS de estos archivos se dirigen a diferentes elementos de HTML header, main y footer. Estos elementos HTML se definieron en las directivas del capítulo anterior Páginas y plantillas.

  5. Expanda la carpeta components en src/main/webpack e inspeccione los archivos.

    Archivos Sass de componente

    Cada archivo se asigna a un componente principal como el componente de acordeón. Cada componente principal se crea con la notación Modificador de elemento de bloque o BEM para facilitar dirigirse a clases CSS específicas con reglas de estilo. El arquetipo del proyecto de AEM ha eliminado los archivos situados debajo de /components con las distintas reglas de BEM para cada componente.

  6. Descargue los estilos base de WKND wknd-base-styles-src-v3.zip y descomprima el archivo.

    Estilos base de WKND

    Para acelerar el tutorial, se proporcionan varios archivos Sass que implementan la marca WKND en función de los componentes principales y la estructura de la plantilla de página del artículo.

  7. Sobrescriba el contenido de ui.frontend/src con los archivos del paso anterior. El contenido del zip debe sobrescribir las siguientes carpetas:

    code language-plain
    /src/main/webpack
             /components
             /resources
             /site
             /static
    

    Archivos cambiados

    Inspeccione los archivos modificados para ver los detalles de la implementación de estilo WKND.

Inspeccionar la integración de ui.frontend ui-frontend-integration

Un elemento de integración clave integrado en el módulo ui.frontend, aem-clientlib-generator, toma los artefactos CSS y JS compilados de un proyecto webpack/npm y los transforma en bibliotecas del lado del cliente de AEM.

Integración de la arquitectura ui.frontend

El arquetipo del proyecto de AEM configura automáticamente esta integración. A continuación, explore cómo funciona.

  1. Abra un terminal de línea de comandos e instale el módulo ui.frontend mediante el comando npm install:

    code language-shell
    $ cd ~/code/aem-guides-wknd/ui.frontend
    $ npm install
    
    note note
    NOTE
    La ejecución de npm install solo se necesita una vez, como después de un nuevo clon o generación del proyecto.
  2. Abra ui.frontend/package.json y en el comando scripts start añada --env writeToDisk=true.

    code language-json
    {
      "scripts": {
        "start": "webpack-dev-server --open --config ./webpack.dev.js --env writeToDisk=true",
      }
    }
    
  3. Inicie el servidor de desarrollo de webpack en modo watch ejecutando el siguiente comando:

    code language-shell
    $ npm run watch
    
  4. Se compilarán los archivos de origen del módulo ui.frontend y se sincronizarán los cambios con AEM en 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. El comando npm run watch rellena finalmente clientlib-site y clientlib-dependencies en el módulo ui.apps, que luego se sincroniza automáticamente con AEM.

    note note
    NOTE
    También hay un perfil npm run prod que minimiza JS y CSS. Esta es la compilación estándar cada vez que la generación del webpack se activa mediante Maven. Encontrará más detalles sobre el módulo ui.frontend aquí.
  6. Inspeccione el archivo site.css debajo de ui.frontend/dist/clientlib-site/site.css. Este es el CSS compilado basado en los archivos fuente Sass.

    css de sitio distribuido

  7. Inspeccione el archivo ui.frontend/clientlib.config.js. Este es el archivo de configuración para un complemento npm, aem-clientlib-generator, que transforma el contenido de /dist en una biblioteca de cliente y la mueve al módulo ui.apps.

  8. Inspeccione el archivo site.css en el módulo ui.apps en ui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css. Debe ser una copia idéntica del archivo site.css del módulo ui.frontend. Ahora que está en el módulo ui.apps, se puede implementar en AEM.

    ui.apps clientlib-site

    note note
    NOTE
    Dado que clientlib-site se compila durante el tiempo de compilación, usando npm o maven, se puede ignorar de forma segura desde el control de código fuente en el módulo ui.apps. Inspeccione el archivo .gitignore debajo de ui.apps.
  9. Abra el artículo de LA Skatepark en AEM en: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.

    Estilos base actualizados para el artículo

    Ahora debería ver los estilos actualizados para el artículo. Es posible que tenga que realizar una actualización brusca para borrar cualquier archivo CSS almacenado en caché por el explorador.

    ¡Empieza a parecerse mucho más a las maquetas!

    note note
    NOTE
    Los pasos realizados anteriormente para crear e implementar el código ui.frontend en AEM se ejecutan automáticamente cuando se activa una compilación de Maven desde la raíz del proyecto mvn clean install -PautoInstallSinglePackage.

Realizar un cambio de estilo

A continuación, realice un pequeño cambio en el módulo ui.frontend para ver cómo npm run watch implementa automáticamente los estilos en la instancia local de AEM.

  1. En el módulo ui.frontend abra el archivo: ui.frontend/src/main/webpack/site/_variables.scss.

  2. Actualice la variable de color $brand-primary:

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

    Guarde los cambios.

  3. Vuelva al explorador y actualice la página de AEM para ver las actualizaciones:

    Bibliotecas del lado del cliente

  4. Revierta el cambio al color $brand-primary y detenga la compilación del Webpack usando el comando CTRL+C.

CAUTION
Puede que no sea necesario el uso del módulo ui.frontend para todos los proyectos. El módulo ui.frontend añade complejidad adicional y si no hay necesidad o deseo de usar algunas de estas herramientas avanzadas del front-end (Sass, webpack, npm…) es posible que no sea necesario.

Inclusión de página y plantilla page-inclusion

A continuación, vamos a revisar cómo se hace referencia a los clientlibs en la página de AEM. Una práctica recomendada común en el desarrollo web es incluir CSS en el encabezado de HTML <head> y JavaScript justo antes de cerrar la etiqueta </body>.

  1. Vaya a la plantilla de la página de artículos en http://localhost:4502/editor.html/conf/wknd/settings/wcm/templates/article-page/structure.html

  2. Haga clic en el icono Información de la página y, en el menú, seleccione Política de la página para abrir el cuadro de diálogo Política de la página.

    Directiva de página de menú de plantilla de artículo

    Información de página > Directiva de página

  3. Observe que las categorías de wknd.dependencies y wknd.site se muestran aquí. De forma predeterminada, los clientlibs configurados mediante la directiva de página se dividen para incluir el CSS en el encabezado de la página y el JavaScript en el final del cuerpo. Puede enumerar explícitamente la JavaScript clientlib que se cargará en el encabezado de la página. Este es el caso de wknd.dependencies.

    Directiva de página de menú de plantilla de página de artículo

    note note
    NOTE
    También es posible hacer referencia a wknd.site o wknd.dependencies directamente desde el componente de página, utilizando el script customheaderlibs.html o customfooterlibs.html. El uso de la plantilla ofrece flexibilidad para que pueda elegir qué clientlibs se utilizan por plantilla. Por ejemplo, si tiene una biblioteca JavaScript pesada que solo se va a utilizar en una plantilla seleccionada.
  4. Vaya a la página de LA Skateparks creada con la Plantilla de página de artículo: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.

  5. Haga clic en el icono Información de la página y, en el menú, seleccione Ver como publicado para abrir la página del artículo fuera del Editor de AEM.

    Ver como aparece publicado

  6. Vea el origen de página de http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled y debería poder ver las siguientes referencias clientlib en <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>
    

    Observe que los clientlibs están usando el punto final del proxy /etc.clientlibs. También debe ver que la siguiente clientlib incluye en la parte inferior de la página:

    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
    En AEM 6.5/6.4, las bibliotecas del lado del cliente no se minifican automáticamente. Consulte la documentación sobre HTML Library Manager para habilitar la minificación (recomendado).
    note warning
    WARNING
    Es fundamental en la publicación que las bibliotecas de cliente no se proporcionen desde /aplicaciones, ya que esta ruta debe restringirse por motivos de seguridad mediante la sección de filtros de Dispatcher. La propiedad allowProxy de la biblioteca de cliente garantiza que CSS y JS se proporcionen desde /etc.clientlibs.

Próximos pasos next-steps

Aprenda a implementar estilos individuales y a reutilizar los componentes principales mediante el sistema de estilos de Experience Manager. El desarrollo con el sistema de estilos cubre el uso del sistema de estilos para ampliar los componentes principales con CSS específicas de la marca y configuraciones de directivas avanzadas del editor de plantillas.

Vea el código terminado en GitHub o revise e implemente el código localmente en la rama Gittutorial/client-side-libraries-solution.

  1. Clone el repositorio github.com/adobe/aem-wknd-guides.
  2. Consulte la rama tutorial/client-side-libraries-solution.

Recursos y herramientas adicionales additional-resources

Webpack DevServer: marcado estático webpack-dev-static

En el par de ejercicios anteriores, se actualizaron varios archivos Sass en el módulo ui.frontend y, a través de un proceso de compilación, finalmente verá que estos cambios se reflejaron en AEM. A continuación, veamos una técnica que usa un webpack-dev-server para desarrollar rápidamente los estilos front-end con respecto al HTML estático.

Esta técnica es útil si la mayoría de los estilos y el código front-end los realiza un desarrollador de front-end dedicado que puede que no tenga un acceso fácil a un entorno de AEM. Esta técnica también permite al FED realizar modificaciones directamente en la HTML, que luego se pueden enviar a un desarrollador de AEM para que las implemente como componentes.

  1. Copie el origen de la página del artículo sobre el parque de patinaje de Los Ángeles en http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.

  2. Vuelva a abrir el IDE. Pegue el marcado copiado de AEM en index.html, en el módulo ui.frontend debajo de src/main/webpack/static.

  3. Edite el marcado copiado y quite cualquier referencia a clientlib-site y 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>
    

    Elimine estas referencias porque el servidor de desarrollo de webpack genera estos artefactos automáticamente.

  4. Inicie el servidor de desarrollo de webpack desde un nuevo terminal ejecutando el siguiente comando desde el módulo 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. Esto debería abrir una nueva ventana del explorador en http://localhost:8080/ con marcado estático.

  6. Edite el archivo src/main/webpack/site/_variables.scss. Reemplace la regla $text-color por lo siguiente:

    code language-diff
    - $text-color:              $black;
    + $text-color:              $pink;
    

    Guarde los cambios.

  7. Debería ver automáticamente que los cambios se reflejan automáticamente en el explorador en http://localhost:8080.

    Cambios en el servidor de desarrollo de webpack local

  8. Revise el archivo /aem-guides-wknd.ui.frontend/webpack.dev.js. Contiene la configuración del webpack utilizada para iniciar webpack-dev-server. Actúa como proxy de las rutas /content y /etc.clientlibs desde una instancia de AEM que se ejecuta localmente. Así es como están disponibles las imágenes y otros clientlibs (no administrados por el código ui.frontend).

    note caution
    CAUTION
    El src de la imagen del marcado estático apunta a un componente de imagen en directo en una instancia de AEM local. Las imágenes aparecen rotas si cambia la ruta a la imagen, si AEM no se ha iniciado o si el explorador no ha iniciado sesión en la instancia local de AEM. Si se transfieren a un recurso externo, también es posible reemplazar las imágenes por referencias estáticas.
  9. Puede detener el servidor de webpack desde la línea de comandos escribiendo CTRL+C.

Depuración de bibliotecas del lado del cliente debugging-clientlibs

Puede resultar difícil solucionar problemas si utiliza diferentes métodos de categorías e incrustaciones para incluir varias bibliotecas de cliente. AEM ofrece varias herramientas para ayudarle con esto. Una de las herramientas más importantes es Reconstruir bibliotecas de cliente lo que obliga a AEM a volver a compilar los archivos LESS y generar el CSS.

  • Bibliotecas de volcado: enumera las bibliotecas de cliente registradas en la instancia de AEM. <host>/libs/granite/ui/content/dumplibs.html

  • Salida de prueba: permite al usuario ver el resultado previsto HTML de las inclusiones de clientlib según la categoría. <host>/libs/granite/ui/content/dumplibs.test.html

  • Validación de dependencias de bibliotecas: resalta las dependencias o categorías incrustadas que no se pueden encontrar. <host>/libs/granite/ui/content/dumplibs.validate.html

  • Reconstruir bibliotecas de cliente: permite al usuario forzar a AEM a reconstruir las bibliotecas de cliente o invalidar la caché de las bibliotecas de cliente. Esta herramienta es eficaz cuando se desarrolla con LESS, ya que esto puede obligar a AEM a recompilar el CSS generado. En general, es más eficaz invalidar cachés y luego actualizar la página que reconstruir las bibliotecas. <host>/libs/granite/ui/content/dumplibs.rebuild.html

reconstruir la biblioteca del cliente

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