El tipo de archivo del proyecto de AEM incluye un mecanismo de compilación del front-end opcional basado en Webpack. Por lo tanto, el módulo ui.frontend se convierte en la ubicación central de todos los recursos front-end del proyecto, incluidos los archivos JavaScript y CSS. Para aprovechar plenamente esta útil y flexible función, es importante comprender cómo encaja el desarrollo front-end en un proyecto AEM.
En términos muy simplificados, AEM proyectos se pueden considerar como dos partes separadas pero relacionadas:
Puesto que estos dos procesos de desarrollo se centran en diferentes partes del proyecto, el desarrollo del back-end y del front-end puede ocurrir en paralelo.
Sin embargo, cualquier proyecto resultante debe utilizar los resultados de ambos esfuerzos de desarrollo, es decir, tanto el back-end como el front-end.
La ejecución de npm run dev
inicia el proceso de compilación del front-end que recopila los archivos JavaScript y CSS almacenados en el módulo ui.frontend y produce dos bibliotecas de cliente minimizadas o ClientLibs denominadas clientlib-site
y clientlib-dependencies
y las deposita en el módulo ui.apps. ClientLibs se pueden implementar para AEM y permitirle almacenar el código del lado del cliente en el repositorio.
Cuando se ejecuta todo el tipo de archivo del proyecto de AEM utilizando mvn clean install -PautoInstallPackage
, todos los artefactos del proyecto, incluido ClientLibs, se insertan en la instancia de AEM.
Obtenga más información sobre cómo AEM gestiona las bibliotecas de cliente en la AEM documentación de desarrollo, cómo incluirlas o vea a continuación cómo las utiliza el módulo ui.frontend.
El módulo de front-end está disponible mediante un AEM ClientLib. Al ejecutar el script de compilación de NPM, la aplicación se crea y el paquete aem-clientlib-generator toma la salida de compilación resultante y la transforma en un ClientLib de este tipo.
ClientLib constará de los siguientes archivos y directorios:
css/
: Archivos CSS que se pueden solicitar en el HTMLcss.txt
: Indica AEM orden y nombres de los archivos en para css/
que se puedan combinarjs/
: Archivos JavaScript que se pueden solicitar en el HTMLjs.txt
Indica AEM orden y nombres de los archivos en para js/
que se puedan combinarresources/
: Mapas de origen, fragmentos de código de punto de entrada (resultantes de la división del código), recursos estáticos (por ejemplo, iconos), etc.El módulo de compilación del front-end es una herramienta útil y muy flexible, pero no impone ninguna opinión particular sobre cómo debe usarse. Los siguientes son dos ejemplos de uso posible, pero las necesidades de cada proyecto pueden dictar otros modelos de uso.
Con Webpack puede aplicar estilo y desarrollarse en función de la salida estática de AEM páginas web dentro del módulo ui.frontend .
wcmmode=disabled
en la dirección URLnpm run dev
para generar las bibliotecas de clienteEn este flujo, un desarrollador de AEM puede realizar los pasos uno y dos y transferir el HTML estático al desarrollador de front-end que se desarrolla en función de la salida HTML de AEM.
También se puede aprovechar la Biblioteca de componentes para capturar muestras de la salida de marcado de cada componente para que funcionen a nivel de componente en lugar de a nivel de página.
Al utilizar Storybook puede realizar un desarrollo del front-end atómico más amplio. Aunque Storybook no está incluido en el tipo de archivo del proyecto AEM, puede instalarlo y almacenar los artefactos de Storybook dentro del módulo ui.frontend . Cuando estén listos para realizar pruebas en AEM, se pueden implementar como bibliotecas de cliente ejecutando npm run dev
.
Independientemente del flujo de trabajo de desarrollo front-end que decida implementar para su proyecto, los desarrolladores back-end y los desarrolladores front-end deben acordar primero el marcado. Normalmente AEM define el marcado, que proporciona los componentes principales. Sin embargo, esto se puede personalizar si es necesario.
El tipo de archivo del proyecto de AEM incluye un mecanismo de compilación del front-end opcional basado en Webpack con las siguientes funciones.
/clientlib/js
, /clientlib/css
o /clientlib/scss
.content.xml
o js.txt
/css.txt
porque todo se ejecuta a través de Webpack./component/
.
sites.js
y vendors.js
.site.js
y site.css
en /clientlib-site
, así como dependencies.js
y dependencies.css
en /clientlib-dependencies
Para obtener más información técnica sobre el módulo ui.frontend , consulte la documentación en GitHub.
npm install
.Debe tener ejecutar el tipo de archivo con la opción -DoptionIncludeFrontendModule=y
para rellenar la carpeta ui.frontend .
Los siguientes scripts npm controlan el flujo de trabajo de front-end:
npm run dev
: compilación completa con la optimización de JS deshabilitada (agitación de árbol, etc.) y los mapas de origen habilitados y la optimización de CSS deshabilitada.npm run prod
: compilación completa con la optimización de JS habilitada (sacudido de árbol, etc.), mapas de origen deshabilitados y optimización de CSS habilitada.npm run start
- Inicia un servidor estático de desarrollo de webpack para el desarrollo local con dependencias mínimas en AEM.El módulo ui.frontend compila el código en la carpeta ui.frontend/src
y genera el CSS y JS compilados, así como cualquier recurso debajo de una carpeta denominada ui.frontend/dist
.
site.js
, site.css
y una resources/
carpeta para imágenes y fuentes dependientes del diseño se crean en una carpeta dist/
clientlib-site.dependencies.js
y dependencies.css
se crean en una dist/clientlib-dependencies
carpeta.La opción de compilación de front-end utiliza archivos de configuración de webpack solo para desarrollo y de solo prod que comparten un archivo de configuración común. De este modo, la configuración de desarrollo y producción se puede modificar de forma independiente.
El proceso de creación del módulo ui.frontend aprovecha el complemento aem-clientlib-generator para mover el CSS compilado, JS y cualquier recurso al módulo ui.apps. La configuración de aem-clientlib-generator se define en clientlib.config.js
. Se generan las siguientes bibliotecas de cliente:
ui.apps/src/main/content/jcr_root/apps/<app>/clientlibs/clientlib-site
ui.apps/src/main/content/jcr_root/apps/<app>/clientlibs/clientlib-dependencies
clientlib-site
Las clientlib-dependencies
categorías y se incluyen en las páginas a través de la configuración de la directiva de página como parte de la plantilla predeterminada. Para ver la directiva, edite Plantilla de página de contenido > Información de página > Política de página.
La inclusión final de las bibliotecas de cliente en la página Sitios es la siguiente:
<HTML>
<head>
<link rel="stylesheet" href="clientlib-base.css" type="text/css">
<script type="text/javascript" src="clientlib-dependencies.js"></script>
<link rel="stylesheet" href="clientlib-dependencies.css" type="text/css">
<link rel="stylesheet" href="clientlib-site.css" type="text/css">
</head>
<body>
....
<script type="text/javascript" src="clientlib-site.js"></script>
<script type="text/javascript" src="clientlib-base.js"></script>
</body>
</HTML>
Por supuesto, la inclusión anterior se puede modificar actualizando la Política de página y/o modificando las categorías y propiedades de incrustación de las respectivas bibliotecas de cliente.
Incluido en el módulo ui.frontend es un webpack-dev-server que proporciona recarga en vivo para un rápido desarrollo front-end fuera de AEM. La configuración aprovecha el complemento html-webpack-plugin para insertar automáticamente CSS y JS compilados desde el módulo ui.frontend en una plantilla HTML estática.
ui.frontend/webpack.dev.js
ui.frontend/src/main/webpack/static/index.html
ui.frontend/webpack.dev.js
.mvn -PautoInstallSinglePackage clean install
para instalar todo el proyecto en una instancia de AEM que se ejecute en localhost:4502
.ui.frontend
.npm run start
para iniciar el servidor de desarrollo de webpack. Una vez iniciado, debe abrir un navegador (localhost:8080
o el siguiente puerto disponible).Ahora puede modificar los archivos CSS, JS, SCSS y TS y ver los cambios inmediatamente reflejados en el servidor de desarrollo de webpack.