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 la implementación de 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.
AEM También se recomienda revisar el tutorial de Conceptos básicos de componentes para comprender los aspectos básicos de las bibliotecas y las bibliotecas del lado del cliente
Proyecto de inicio
Consulte el código de línea de base en el que se basa el tutorial:
-
Consulte la rama
tutorial/client-side-libraries-start
de GitHubcode language-shell $ cd aem-guides-wknd $ git checkout tutorial/client-side-libraries-start
-
AEM Implemente una base de código en una instancia de local con sus habilidades con Maven:
code language-shell $ mvn clean install -PautoInstallSinglePackage
note note NOTE AEM Si utiliza la versión 6.5 o 6.4 de la aplicación, 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 desprotegerlo localmente cambiando a la rama tutorial/client-side-libraries-solution
.
Objetivos
- Comprenda cómo se incluyen las bibliotecas del lado del cliente en una página mediante una plantilla editable.
- Aprenda a utilizar el módulo
ui.frontend
y un servidor de desarrollo de Webpack para el desarrollo front-end dedicado. - Comprenda el flujo de trabajo completo de ofrecer CSS y JavaScript compilados a una implementación de Sites.
Lo que va a generar what-build
En este capítulo, agrega 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. AEM Puede utilizar un flujo de trabajo front-end avanzado para integrar un proyecto de Webpack en una biblioteca de cliente de.
Página de artículo con estilos de línea de base aplicados
Fondo 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:
- Almacene CSS/JS en pequeños archivos discretos para facilitar el desarrollo y mantenimiento
- Administrar dependencias en marcos de terceros de forma organizada
- Minimice 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.
AEM Implemente el código de inicio base en una instancia local de 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 agregar CSS y JavaScript a la página.
Organización de bibliotecas del cliente organization
AEM A continuación, vamos a explorar la organización de clientlibs generados por el Arquetipo de proyecto de.
Diagrama de alto nivel de la organización del cliente y la inclusión de páginas
-
Si usa VSCode u otro IDE, abra el módulo ui.apps.
-
Expanda la ruta
/apps/wknd/clientlibs
para ver los clientlibs generados por el tipo de archivo.En la sección siguiente, estos clientlibs se revisan con más detalle.
-
La siguiente tabla resume las bibliotecas de cliente. Encontrará más detalles sobre incluidas las bibliotecas de clientes 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 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
-
Observe que
clientlib-site
yclientlib-dependencies
se omiten desde el control de código fuente. Esto es por diseño, ya que se generan en tiempo de compilación por el móduloui.frontend
.
Actualizar 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 idiomas 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.
-
Abra el módulo ui.frontend y vaya a
src/main/webpack/site
. -
Abrir el archivo
main.scss
main.scss
es el punto de entrada a los archivos Sass en el móduloui.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 de HTML. Una expresión regular incluye los estilos para los estilos de componentes individuales ensrc/main/webpack/components
. Otra expresión regular incluye los archivos bajosrc/main/webpack/site/styles
. -
Inspect el archivo
main.ts
. Incluyemain.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óduloui.frontend
. -
Inspect muestra los archivos por debajo de
src/main/webpack/site/styles
:Estos archivos contienen estilos para 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
yfooter
. Estos elementos HTML fueron definidos por directivas del capítulo anterior Páginas y plantillas. -
Expanda la carpeta
components
ensrc/main/webpack
e inspeccione los archivos.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 la segmentación de clases CSS específicas con reglas de estilo. AEM Los archivos por debajo de
/components
han sido tachados por el tipo de archivo del proyecto de con las diferentes reglas de BEM para cada componente. -
Descargue los estilos base de WKND wknd-base-styles-src-v3.zip y descomprima el archivo.
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 de artículo.
-
Sobrescribir el contenido de
ui.frontend/src
con archivos del paso anterior. El contenido del zip debe sobrescribir las siguientes carpetas:code language-plain /src/main/webpack /components /resources /site /static
Inspect muestra los archivos modificados para ver los detalles de la implementación de estilo WKND.
Integración de Inspect con ui.frontend ui-frontend-integration
AEM 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, que se encuentran en el lado del cliente.
AEM El tipo de archivo del proyecto de configura automáticamente esta integración. A continuación, explore cómo funciona.
-
Abra un terminal de línea de comandos e instale el módulo ui.frontend con 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. -
Abra
ui.frontend/package.json
y en el comando scripts start agregue--env writeToDisk=true
.code language-json { "scripts": { "start": "webpack-dev-server --open --config ./webpack.dev.js --env writeToDisk=true", } }
-
Inicie el servidor de desarrollo de Webpack en modo watch ejecutando el siguiente comando:
code language-shell $ npm run watch
-
AEM Esto compila los archivos de origen del módulo
ui.frontend
y sincroniza los cambios con los archivos de origen de la base de datos de tipo http://localhost:4502, que se encuentran en la dirección URLcode 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
-
AEM En última instancia, el comando
npm run watch
rellena clientlib-site y clientlib-dependencies en el módulo ui.apps, que luego se sincroniza automáticamente con el módulo de la aplicación de la aplicación de la aplicación de la aplicación de la aplicación de la aplicación de la aplicación de la aplicación de la aplicación de la.note note NOTE También hay un perfil npm run prod
que minimiza el JS y el 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í. -
Inspect el archivo
site.css
debajo deui.frontend/dist/clientlib-site/site.css
. Este es el CSS compilado basado en los archivos fuente Sass. -
Inspect 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óduloui.apps
. -
Inspect el archivo
site.css
en el módulo ui.apps enui.apps/src/main/content/jcr_root/apps/wknd/clientlibs/clientlib-site/css/site.css
. Debe ser una copia idéntica del archivosite.css
del módulo ui.frontend. AEM Ahora que se encuentra en el módulo ui.apps, se puede implementar en el módulo de.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. Inspect cambió el archivo de .gitignore
por debajo de ui.apps. -
AEM Abra el artículo de LA Skatepark en la página de inicio de sesión en: http://localhost:4502/editor.html/content/wknd/us/en/magazine/guide-la-skateparks.html.
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.
¡Está empezando a mirar mucho más cerca de las maquetas!
note note NOTE AEM Los pasos realizados anteriormente para generar e implementar el código ui.frontend en el que se va a ejecutar el código se ejecutan automáticamente cuando se activa una generación de Maven desde la raíz del proyecto mvn clean install -PautoInstallSinglePackage
.
Realizar un cambio de estilo
AEM 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 de la instancia de la local.
-
En, el módulo
ui.frontend
abre el archivo:ui.frontend/src/main/webpack/site/_variables.scss
. -
Actualizar la variable de color
$brand-primary
:code language-scsss //== variables.css //== Brand Colors $brand-primary: $pink;
Guarde los cambios.
-
AEM Vuelva al explorador y actualice la página de la para ver las actualizaciones:
-
Revierta el cambio al color
$brand-primary
y detenga la compilación del Webpack usando el comandoCTRL+C
.
Inclusión de página y plantilla page-inclusion
AEM A continuación, vamos a revisar cómo se hace referencia a los clientlibs en la página de la. 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>
.
-
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
-
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.
Información de página > Directiva de página
-
Observe que las categorías de
wknd.dependencies
ywknd.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 dewknd.dependencies
.note note NOTE También es posible hacer referencia a wknd.site
owknd.dependencies
directamente desde el componente de página, utilizando el scriptcustomheaderlibs.html
ocustomfooterlibs.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. -
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.
-
AEM 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 la.
-
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 extremo 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 AEM Para la versión 6.5/6.4 de, las bibliotecas del lado del cliente no se minifican automáticamente. Consulte la documentación del Administrador de bibliotecas de HTML 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.
Siguientes 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íficos 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 Git tutorial/client-side-libraries-solution
.
- Clonar el repositorio github.com/adobe/aem-wknd-guides.
- Consulte la rama
tutorial/client-side-libraries-solution
.
Herramientas y recursos adicionales additional-resources
Webpack DevServer: marcado estático webpack-dev-static
AEM 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 se vio que estos cambios se reflejaban en la. A continuación veamos una técnica que usa webpack-dev-server para desarrollar rápidamente los estilos front-end con el HTML static.
AEM Esta técnica es práctica si la mayoría de los estilos y el código front-end los realiza un desarrollador de front-end dedicado que puede no tener acceso fácil a un entorno de. Esta técnica también permite a la FED hacer modificaciones directamente al HTML AEM, que luego pueden entregarse a un desarrollador de la FED para que las implemente como componentes.
-
Copie el origen de página de la página de artículos del parque de patinaje LA en http://localhost:4502/content/wknd/us/en/magazine/guide-la-skateparks.html?wcmmode=disabled.
-
Vuelva a abrir el IDE. AEM Pegue el marcado copiado desde el archivo de comandos de la biblioteca de recursos en el módulo
index.html
en el módulo ui.frontend, debajo desrc/main/webpack/static
. -
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.
-
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
-
Esto debería abrir una nueva ventana del explorador en http://localhost:8080/ con marcado estático.
-
Edite el archivo
src/main/webpack/site/_variables.scss
. Reemplace la regla$text-color
con lo siguiente:code language-diff - $text-color: $black; + $text-color: $pink;
Guarde los cambios.
-
Debería ver automáticamente los cambios que se reflejan automáticamente en el explorador en http://localhost:8080.
-
Revise el archivo
/aem-guides-wknd.ui.frontend/webpack.dev.js
. Contiene la configuración del Webpack utilizada para iniciar el webpack-dev-server. AEM Proporciona las rutas de acceso/content
y/etc.clientlibs
desde una instancia de ejecución local de la instancia de la instancia de. Así es como están disponibles las imágenes y otros clientlibs (no administrados por el código ui.frontend).note caution CAUTION AEM El origen de la imagen del marcado estático apunta a un componente de imagen en directo en una instancia de local. AEM AEM Las imágenes aparecen rotas si cambia la ruta a la imagen, si no se inicia la o si el explorador no ha iniciado sesión en la instancia de la aplicación local de. Si se transfiere a un recurso externo, también es posible reemplazar las imágenes con referencias estáticas. -
Puede detener el servidor de Webpack desde la línea de comandos escribiendo
CTRL+C
.
aemfed develop-aemfed
aemfed es una herramienta de línea de comandos de código abierto que se puede usar para acelerar el desarrollo front-end. Funciona con aemsync, Browsersync y Sling Log Tracer.
AEM En un nivel superior, aemfed
está diseñado para escuchar los cambios de archivo dentro del módulo ui.apps y sincronizarlos automáticamente directamente con una instancia de la instancia en ejecución. En función de los cambios, un explorador local se actualiza automáticamente, lo que acelera el desarrollo del front-end. También está diseñado para funcionar con el rastreador de registros de Sling a fin de mostrar automáticamente cualquier error del lado del servidor directamente en el terminal.
Si está trabajando mucho en el módulo ui.apps, modificando los scripts HTL y creando componentes personalizados, aemfed puede ser una herramienta poderosa. Encontrará toda la documentación aquí.
Depuración de bibliotecas del lado del cliente debugging-clientlibs
Puede resultar difícil solucionar problemas si utiliza diferentes métodos de categories y embeds para incluir varias bibliotecas de cliente. AEM La expone varias herramientas para ayudarle con esto. AEM Una de las herramientas más importantes es Reconstruir bibliotecas de cliente, lo que obliga a los usuarios a recompilar archivos LESS y generar el archivo CSS.
-
AEM Bibliotecas de volcado: enumera las bibliotecas de cliente registradas en la instancia de la.
<host>/libs/granite/ui/content/dumplibs.html
-
Salida de prueba: permite al usuario ver la salida de HTML esperada de clientlib includes 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
-
AEM Reconstruir bibliotecas de cliente: permite al usuario forzar a los usuarios a que reconstruyan las bibliotecas de cliente o a que invaliden la caché de las bibliotecas de cliente. AEM Esta herramienta es eficaz cuando se desarrolla con LESS, ya que esto puede obligar a los usuarios a volver a compilar 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