SPA Integración de la developer-workflow
SPA Comprenda cómo el código fuente de una aplicación de una sola página () escrita en React se puede integrar en un proyecto de Adobe Experience Manager AEM (). SPA AEM Aprenda a utilizar herramientas front-end modernas, como un servidor de desarrollo de Webpack, para desarrollar rápidamente la contra la API del modelo JSON de la red de aplicaciones de la red de aplicaciones de JSON de la red de aplicaciones de la red (JSON) de la red de archivos de datos.
Objetivo
- SPA AEM Comprender cómo el proyecto de está integrado con las bibliotecas del lado del cliente y la forma en que lo hace.
- Aprenda a utilizar un servidor de desarrollo de Webpack para el desarrollo front-end dedicado.
- AEM Explore el uso de un proxy y un archivo mock estático para desarrollar con la API del modelo JSON de la.
Qué va a generar
SPA AEM En este capítulo, realizará varios cambios pequeños en la para comprender cómo se integra con los recursos de la interfaz de usuario de.
SPA Este capítulo agregará un componente Header
simple a la. AEM SPA En el proceso de crear este componente static Header
se usan varios enfoques para el desarrollo de la.
AEM
SPA La se ha ampliado para agregar un componente Header
estático
Requisitos previos
Revise las herramientas y las instrucciones necesarias para configurar un entorno de desarrollo local. SPA AEM Este capítulo es una continuación del capítulo Crear proyecto; sin embargo, para continuar, todo lo que necesita es un proyecto de trabajo habilitado para la creación de proyectos que se encuentre en la fase de creación de un proyecto que funcione y que esté habilitado para la creación de proyectos.
Enfoque de integración integration-approach
AEM Se han creado dos módulos como parte del proyecto de: ui.apps
y ui.frontend
.
SPA El módulo ui.frontend
es un proyecto webpack que contiene todo el código fuente de la. SPA La mayoría de las pruebas y el desarrollo de la se realizan en el proyecto de Webpack. SPA Cuando se activa una compilación de producción, la generación de la se compila mediante Webpack. AEM Los artefactos compilados (CSS y Javascript) se copian en el módulo ui.apps
, que luego se implementa en el tiempo de ejecución de la.
SPA Representación de alto nivel de la integración de la.
Encontrará información adicional sobre la versión del front-end aquí.
Inspect SPA la integración de la inspect-spa-integration
SPA AEM A continuación, inspeccione el módulo ui.frontend
para comprender el tipo de archivo del proyecto que ha generado automáticamente el módulo de datos de tipo de archivo.
-
AEM En el IDE de su elección, abra el proyecto de. Este tutorial usará el IDE de código de Visual Studio.
AEM SPA
-
Expanda e inspeccione la carpeta
ui.frontend
. Abrir el archivoui.frontend/package.json
-
En
dependencies
debería ver varios elementos relacionados conreact
, incluidoreact-scripts
ui.frontend
es una aplicación de React basada en Crear aplicación de React o CRA para abreviar. La versiónreact-scripts
indica qué versión de CRA se utiliza. -
También hay varias dependencias con el prefijo
@adobe
:code language-json "@adobe/aem-react-editable-components": "~1.1.2", "@adobe/aem-spa-component-mapping": "~1.1.0", "@adobe/aem-spa-page-model-manager": "~1.3.3", "@adobe/aem-core-components-react-base": "1.1.8", "@adobe/aem-core-components-react-spa": "1.1.7",
AEM SPA SPA AEM Los módulos anteriores conforman el SDK de JS de Editor de y proporcionan la funcionalidad para que sea posible asignar componentes de la a componentes de la aplicación.
AEM AEM También se incluyen Componentes de WCM - React Core implementation y Componentes de WCM - Editor de spa - React Core implementation. AEM Se trata de un conjunto de componentes de la interfaz de usuario reutilizables que se asignan a componentes de la interfaz de usuario listos para usar. Están diseñadas para utilizarse tal cual y para satisfacer las necesidades de su proyecto.
-
En el archivo
package.json
hay variosscripts
definidos:code language-json "scripts": { "start": "react-scripts start", "build": "react-scripts build && clientlib", "test": "react-scripts test", "eject": "react-scripts eject", }
Son scripts de compilación estándar disponibles mediante la aplicación Crear React.
La única diferencia es la adición de
&& clientlib
al scriptbuild
. SPA Esta instrucción adicional es responsable de copiar los datos compilados en el móduloui.apps
como una biblioteca del lado del cliente durante una compilación.El módulo npm aem-clientlib-generator se usa para facilitar esto.
-
Inspect el archivo
ui.frontend/clientlib.config.js
. aem-clientlib-generator utiliza este archivo de configuración para determinar cómo generar la biblioteca de cliente. -
Inspect el archivo
ui.frontend/pom.xml
. Este archivo transforma la carpetaui.frontend
en un módulo Maven. SPA El archivopom.xml
se ha actualizado para usar el complemento frontend-maven-plugin para probar y compilar el durante una compilación de Maven. -
Inspect cambió el archivo
index.js
a lasui.frontend/src/index.js
:code language-js //ui.frontend/src/index.js ... document.addEventListener('DOMContentLoaded', () => { ModelManager.initialize().then(pageModel => { const history = createBrowserHistory(); render( <Router history={history}> <App history={history} cqChildren={pageModel[Constants.CHILDREN_PROP]} cqItems={pageModel[Constants.ITEMS_PROP]} cqItemsOrder={pageModel[Constants.ITEMS_ORDER_PROP]} cqPath={pageModel[Constants.PATH_PROP]} locationPathname={window.location.pathname} /> </Router>, document.getElementById('spa-root') ); }); });
SPA
index.js
es el punto de entrada de la. AEM SPAModelManager
lo proporciona el SDK de JS del Editor de JS de la interfaz de usuario de. Es responsable de llamar apageModel
(el contenido JSON) y de inyectarlo en la aplicación. -
Inspect cambió el archivo
import-components.js
a lasui.frontend/src/components/import-components.js
. Este archivo importa los componentes principales de React predeterminados y los pone a disposición del proyecto. AEM SPA En el siguiente capítulo analizaremos la asignación de contenido de la a componentes de la.
SPA Añadir un componente de estático static-spa-component
SPA AEM A continuación, añada un nuevo componente a la e implemente los cambios en una instancia local de. SPA Este es un cambio sencillo, solo para ilustrar cómo se actualiza la.
-
En el módulo
ui.frontend
, debajo deui.frontend/src/components
, cree una nueva carpeta denominadaHeader
. -
Cree un archivo con el nombre
Header.js
debajo de la carpetaHeader
. -
Rellene
Header.js
con lo siguiente:code language-js //Header.js import React, {Component} from 'react'; export default class Header extends Component { render() { return ( <header className="Header"> <div className="Header-container"> <h1>WKND</h1> </div> </header> ); } }
Arriba se encuentra un componente React estándar que generará una cadena de texto estático.
-
Abra el archivo
ui.frontend/src/App.js
. Este es el punto de entrada de la aplicación. -
Realice las siguientes actualizaciones en
App.js
para incluir laHeader
estática:code language-diff import { Page, withModel } from '@adobe/aem-react-editable-components'; import React from 'react'; + import Header from './components/Header/Header'; // This component is the application entry point class App extends Page { render() { return ( <div> + <Header /> {this.childComponents} {this.childPages} </div>
-
Abra un nuevo terminal, vaya a la carpeta
ui.frontend
y ejecute el comandonpm run build
:code language-shell $ cd aem-guides-wknd-spa $ cd ui.frontend $ npm run build ... Compiled successfully. File sizes after gzip: 118.95 KB (-33 B) build/static/js/2.489f399a.chunk.js 1.11 KB (+48 B) build/static/js/main.6cfa5095.chunk.js 806 B build/static/js/runtime-main.42b998df.js 451 B build/static/css/main.e57bbe8a.chunk.css
-
Navegue hasta la carpeta
ui.apps
. SPA Debajo deui.apps/src/main/content/jcr_root/apps/wknd-spa-react/clientlibs/clientlib-react
debería ver que los archivos compilados de laui.frontend/build
se han copiado de la carpeta. -
Vuelva al terminal y navegue hasta la carpeta
ui.apps
. Ejecute el siguiente comando Maven:code language-shell $ cd ../ui.apps $ mvn clean install -PautoInstallPackage ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.629 s [INFO] Finished at: 2020-05-04T17:48:07-07:00 [INFO] ------------------------------------------------------------------------
AEM Esto implementará el paquete
ui.apps
en una instancia local en ejecución de la aplicación de la aplicación de la. -
Abra una ficha del explorador y vaya a http://localhost:4502/editor.html/content/wknd-spa-react/us/en/home.html. SPA Ahora debería ver el contenido del componente
Header
que se muestra en el cuadro de diálogo de elementos de la interfaz de usuario de.Los pasos anteriores se ejecutan automáticamente al activar una compilación de Maven desde la raíz del proyecto (es decir,
mvn clean install -PautoInstallSinglePackage
). SPA AEM Ahora debería comprender los conceptos básicos de la integración entre las bibliotecas del lado del cliente de la y la de la segmentación de datos AEM Observe que todavía puede editar y agregarText
componentes en el elemento de seguridad de la base de datos que se encuentra debajo del componente estáticoHeader
.
Servidor de desarrollo de Webpack: proxy de la API de JSON proxy-json
AEM Como se ha visto en los ejercicios anteriores, llevar a cabo una compilación y sincronizar la biblioteca de cliente con una instancia local de lleva unos minutos. SPA Esto es aceptable para las pruebas finales, pero no es ideal para la mayoría del desarrollo de la.
SPA Se puede usar webpack-dev-server para desarrollar rápidamente el. SPA AEM La está impulsada por un modelo JSON generado por el grupo de informes de. AEM En este ejercicio, el contenido JSON de una instancia en ejecución de se procesa como proxy en el servidor de desarrollo.
-
Vuelva al IDE y abra el archivo
ui.frontend/package.json
.Busque una línea como la siguiente:
code language-json "proxy": "http://localhost:4502",
Crear aplicación React proporciona un mecanismo fácil para las solicitudes de API de proxy. AEM Todas las solicitudes desconocidas se procesan como proxy a través de
localhost:4502
, el inicio rápido de la aplicación local de la. -
Abra una ventana de terminal y vaya a la carpeta
ui.frontend
. Ejecute el comandonpm start
:code language-shell $ cd ui.frontend $ npm start ... Compiled successfully! You can now view wknd-spa-react in the browser. Local: http://localhost:3000 On Your Network: http://192.168.86.136:3000 Note that the development build is not optimized. To create a production build, use npm run build.
-
Abra una nueva ficha de explorador (si no está abierta) y vaya a http://localhost:3000/content/wknd-spa-react/us/en/home.html.
AEM Debería ver el mismo contenido que en el caso de los recursos de creación, pero sin ninguna de las capacidades de creación habilitadas.
note note NOTE AEM AEM Debido a los requisitos de seguridad de la, deberá iniciar sesión en la instancia de local (http://localhost:4502) en el mismo explorador, pero en una pestaña diferente. -
Vuelva al IDE y cree un archivo con el nombre
Header.css
en la carpetasrc/components/Header
. -
Rellene
Header.css
con lo siguiente:code language-css .Header { background-color: #FFEA00; width: 100%; position: fixed; top: 0; left: 0; z-index: 99; box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.24); } .Header-container { display: flex; max-width: 1024px; margin: 0 auto; padding: 12px; } .Header-container h1 { letter-spacing: 0; font-size: 48px; }
-
Vuelva a abrir
Header.js
y agregue la línea siguiente para hacer referencia aHeader.css
:code language-diff //Header.js import React, {Component} from 'react'; + require('./Header.css');
Guarde los cambios.
-
Vaya a http://localhost:3000/content/wknd-spa-react/us/en/home.html para ver los cambios de estilo reflejados automáticamente.
-
Abra el archivo
Page.css
enui.frontend/src/components/Page
. Realice los siguientes cambios para corregir el relleno:code language-css .page { max-width: 1024px; margin: 0 auto; padding: 12px; padding-top: 50px; }
-
Vuelva al explorador en http://localhost:3000/content/wknd-spa-react/us/en/home.html. Debería ver reflejados inmediatamente los cambios en la aplicación.
Se agregó
AEM Puede seguir haciendo actualizaciones de contenido en los segmentos de y ver cómo se reflejan en webpack-dev-server, ya que estamos procesando el contenido como proxy.
-
Detenga el servidor de desarrollo de Webpack con
ctrl+c
en el terminal.
SPA AEM Implementar actualizaciones de la en el
Los cambios realizados en Header
actualmente solo son visibles a través de webpack-dev-server. SPA AEM Implemente el actualizado para ver los cambios que se han producido.
-
AEM Vaya a la raíz del proyecto (
aem-guides-wknd-spa
) e implemente el proyecto para que se ejecute mediante Maven:code language-shell $ cd .. $ mvn clean install -PautoInstallSinglePackage
-
Vaya a http://localhost:4502/editor.html/content/wknd-spa-react/us/en/home.html. Debería ver los
Header
actualizados y los estilos aplicados.AEM
SPA AEM Ahora que la actualización de la se encuentra en la fase de creación, la creación puede continuar.
Enhorabuena. congratulations
SPA AEM ¡Enhorabuena, ha actualizado la y ha explorado la integración con la opción de integración de! SPA AEM Ahora sabe cómo desarrollar la con la API del modelo JSON de la mediante webpack-dev-server.
Siguientes pasos next-steps
SPA AEM Asignación de componentes de a componentes de. Obtenga información sobre cómo asignar componentes de React a componentes de Adobe Experience Manager AEM AEM SPA () con el SDK de JS de Editor de. SPA AEM SPA AEM La asignación de componentes permite a los usuarios realizar actualizaciones dinámicas en los componentes de la de componentes del Editor de componentes, de forma similar a la creación tradicional de los componentes de la.
(Bonus) Servidor de desarrollo de Webpack: simulación de API de JSON mock-json
Otro enfoque para el desarrollo rápido es utilizar un archivo JSON estático para actuar como modelo JSON. AEM Al "burlarse" del JSON, eliminamos la dependencia de una instancia local de. También permite a un desarrollador front-end actualizar el modelo JSON para probar la funcionalidad y dirigir cambios en la API JSON que luego implementaría un desarrollador back-end.
AEM La configuración inicial del JSON ficticio requiere una instancia de local.
-
Vuelva al IDE, vaya a
ui.frontend/public
y agregue una nueva carpeta llamadamock-content
. -
Cree un nuevo archivo con el nombre
mock.model.json
debajo deui.frontend/public/mock-content
. -
En el explorador, vaya a http://localhost:4502/content/wknd-spa-react/us/en.model.json.
AEM Este es el JSON exportado por el usuario que está impulsando la aplicación. Copie la salida JSON.
-
Pegue la salida JSON del paso anterior en el archivo
mock.model.json
. -
Abra el archivo
index.html
enui.frontend/public/index.html
. AEM Actualice la propiedad de metadatos para el modelo de página de la página de datos para que apunte a una variable%REACT_APP_PAGE_MODEL_PATH%
:code language-html <!-- AEM page model --> <meta property="cq:pagemodel_root_url" content="%REACT_APP_PAGE_MODEL_PATH%" />
El uso de una variable para el valor de
cq:pagemodel_root_url
hará que sea más fácil alternar entre el proxy y el modelo json ficticio. -
Abra el archivo
ui.frontend/.env.development
y realice las siguientes actualizaciones para comentar el valor anterior deREACT_APP_PAGE_MODEL_PATH
yREACT_APP_API_HOST
:code language-diff + PUBLIC_URL=/ - PUBLIC_URL=/etc.clientlibs/wknd-spa-react/clientlibs/clientlib-react/resources - REACT_APP_PAGE_MODEL_PATH=/content/wknd-spa-react/us/en.model.json + REACT_APP_PAGE_MODEL_PATH=/mock-content/mock.model.json - REACT_APP_API_HOST=http://localhost:4502 + #REACT_APP_API_HOST=http://localhost:4502 REACT_APP_ROOT=/content/wknd-spa-react/us/en/home.html
-
Si se está ejecutando, detenga webpack-dev-server. Inicie webpack-dev-server desde el terminal:
code language-shell $ cd ui.frontend $ npm start
SPA Vaya a http://localhost:3000/content/wknd-spa-react/us/en/home.html y debería ver el código con el mismo contenido utilizado en el json proxy.
-
Realice un pequeño cambio en el archivo
mock.model.json
creado anteriormente. Debería ver el contenido actualizado que se refleja inmediatamente en webpack-dev-server.
SPA La posibilidad de manipular el modelo JSON y ver los efectos en un modelo en directo puede ayudar a un desarrollador a comprender la API del modelo JSON. También permite que el desarrollo del front-end y del back-end se produzca en paralelo.
Ahora puede cambiar dónde consumir el contenido JSON alternando las entradas del archivo env.development
:
# JSON API via proxy to AEM
#REACT_APP_PAGE_MODEL_PATH=/content/wknd-spa-react/us/en.model.json
#REACT_APP_API_HOST=http://localhost:4502
# JSON API via static mock file
REACT_APP_PAGE_MODEL_PATH=/mock-content/mock.model.json