Bootstrap el SPA remoto para el editor de SPA
- El Editor universal para editar contenido sin encabezado de forma visual.
- El Editor de fragmentos de contenido para la edición de contenido sin encabezado basada en formularios.
Antes de poder agregar las áreas editables a la SPA remota, debe arrancarse con AEM SPA Editor JavaScript SDK y algunas otras configuraciones.
Instalación de dependencias npm de AEM SPA Editor JS SDK
En primer lugar, revise las dependencias npm de SPA de AEM para el proyecto React y, a continuación, instálelas.
@adobe/aem-spa-page-model-manager
: proporciona la API para recuperar contenido de AEM.@adobe/aem-spa-component-mapping
: proporciona la API que asigna contenido de AEM a los componentes de SPA.@adobe/aem-react-editable-components
v2 : proporciona una API para generar componentes de SPA personalizados y proporciona implementaciones de uso común como el componente ReactAEMPage
.
$ cd ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app
$ npm install @adobe/aem-spa-page-model-manager
$ npm install @adobe/aem-spa-component-mapping
$ npm install @adobe/aem-react-editable-components
Revisar variables de entorno de SPA
Varias variables de entorno deben exponerse al SPA remoto para que sepa cómo interactuar con AEM.
-
Abrir proyecto de SPA remoto en
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app
en su IDE -
Abrir el archivo
.env.development
-
En el archivo, preste atención específica a las claves y actualice según sea necesario:
code language-none REACT_APP_HOST_URI=http://localhost:4502 REACT_APP_USE_PROXY=true REACT_APP_AUTH_METHOD=basic REACT_APP_BASIC_AUTH_USER=admin REACT_APP_BASIC_AUTH_PASS=admin
Recuerde que las variables de entorno personalizadas en React deben tener el prefijo
REACT_APP_
.-
REACT_APP_HOST_URI
: el esquema y el host del servicio de AEM al que se conecta el SPA remoto.- Este valor cambia en función de si el entorno de AEM (local, de desarrollo, de fase o de producción) y el tipo de servicio de AEM (de autor a publicación)
-
REACT_APP_USE_PROXY
: esto evita problemas de CORS durante el desarrollo, ya que indica al servidor de desarrollo de react que realice solicitudes de AEM proxy como/content, /graphql, .model.json
mediante el módulohttp-proxy-middleware
. -
REACT_APP_AUTH_METHOD
: método de autenticación para solicitudes atendidas por AEM, las opciones son "service-token", "dev-token", "basic" o dejar en blanco para caso de uso sin autenticación- Necesario para su uso con AEM Author
- Posiblemente sea necesario para su uso con AEM Publish (si el contenido está protegido)
- El desarrollo con AEM SDK admite cuentas locales a través de la autenticación básica. Este es el método que se utiliza en este tutorial.
- Al integrarse con AEM as a Cloud Service, utilice tokens de acceso
-
REACT_APP_BASIC_AUTH_USER
: el nombre de usuario de AEM por la SPA para autenticarse al recuperar contenido de AEM. -
REACT_APP_BASIC_AUTH_PASS
: la contraseña de AEM por la SPA para autenticarse al recuperar contenido de AEM.
-
Integración de la API de ModelManager
Con las dependencias npm de la SPA de AEM disponibles para la aplicación, inicialice ModelManager
de AEM en index.js
del proyecto antes de que se invoque ReactDOM.render(...)
.
ModelManager es responsable de conectarse a AEM para recuperar contenido editable.
-
Abra el proyecto SPA remoto en el IDE
-
Abrir el archivo
src/index.js
-
Agregue la importación
ModelManager
e inicialícela antes de la invocación deroot.render(..)
,code language-javascript ... import { ModelManager } from "@adobe/aem-spa-page-model-manager"; // Initialize the ModelManager before invoking root.render(..). ModelManager.initializeAsync(); const container = document.getElementById('root'); const root = createRoot(container); root.render(<App />);
El archivo src/index.js
debe tener el siguiente aspecto:
Configuración de un proxy SPA interno
Al crear una SPA editable, es mejor configurar un proxy interno en la SPA, que esté configurado para enrutar las solicitudes adecuadas a AEM. Esto se hace usando el módulo http-proxy-middleware npm, que ya está instalado en la aplicación WKND GraphQL base.
-
Abra el proyecto SPA remoto en el IDE
-
Abra el archivo en
src/proxy/setupProxy.spa-editor.auth.basic.js
-
Actualice el archivo con el siguiente código:
code language-javascript const { createProxyMiddleware } = require('http-proxy-middleware'); const {REACT_APP_HOST_URI, REACT_APP_BASIC_AUTH_USER, REACT_APP_BASIC_AUTH_PASS } = process.env; /* Set up a proxy with AEM for local development In a production environment this proxy should be set up at the webserver level or absolute URLs should be used. */ module.exports = function(app) { /** * Filter to check if the request should be re-routed to AEM. The paths to be re-routed at: * - Starts with /content (AEM content) * - Starts with /graphql (AEM graphQL endpoint) * - Ends with .model.json (AEM Content Services) * * @param {*} path the path being requested of the SPA * @param {*} req the request object * @returns true if the SPA request should be re-routed to AEM */ const toAEM = function(path, req) { return path.startsWith('/content') || path.startsWith('/graphql') || path.endsWith('.model.json') } /** * Re-writes URLs being proxied to AEM such that they can resolve to real AEM resources * - The "root" case of `/.model.json` are rewritten to the SPA's home page in AEM * - .model.json requests for /adventure:xxx routes are rewritten to their corresponding adventure page under /content/wknd-app/us/en/home/adventure/ * * @param {*} path the path being requested of the SPA * @param {*} req the request object * @returns returns a re-written path, or nothing to use the @param path */ const pathRewriteToAEM = function (path, req) { if (path === '/.model.json') { return '/content/wknd-app/us/en/home.model.json'; } else if (path.startsWith('/adventure/') && path.endsWith('.model.json')) { return '/content/wknd-app/us/en/home/adventure/' + path.split('/').pop(); } } /** * Register the proxy middleware using the toAEM filter and pathRewriteToAEM rewriter */ app.use( createProxyMiddleware( toAEM, // Only route the configured requests to AEM { target: REACT_APP_HOST_URI, changeOrigin: true, // Pass in credentials when developing against an Author environment auth: `${REACT_APP_BASIC_AUTH_USER}:${REACT_APP_BASIC_AUTH_PASS}`, pathRewrite: pathRewriteToAEM // Rewrite SPA paths being sent to AEM } ) ); /** * Enable CORS on requests from the SPA to AEM * * If this rule is not in place, CORS errors will occur when running the SPA on http://localhost:3000 */ app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", REACT_APP_HOST_URI); next(); }); };
El archivo
setupProxy.spa-editor.auth.basic.js
debe tener el siguiente aspecto:Esta configuración proxy hace dos cosas principales:
-
Solicitudes específicas de proxy realizadas a la SPA (
http://localhost:3000
) para AEMhttp://localhost:4502
- Solo procesa solicitudes cuyas rutas coinciden con patrones que indican que AEM debe servirlas, tal como se define en
toAEM(path, req)
. - Reescribe las rutas de acceso SPA a sus páginas de AEM homólogas, tal como se definen en
pathRewriteToAEM(path, req)
- Solo procesa solicitudes cuyas rutas coinciden con patrones que indican que AEM debe servirlas, tal como se define en
-
Agrega encabezados CORS a todas las solicitudes para permitir el acceso al contenido de AEM, tal como se define en
res.header("Access-Control-Allow-Origin", REACT_APP_HOST_URI);
- Si no se añade, se producen errores de CORS al cargar contenido de AEM en la SPA.
-
-
Abrir el archivo
src/setupProxy.js
-
Revise la línea que señala al archivo de configuración del proxy
setupProxy.spa-editor.auth.basic
:code language-none ... case BASIC: // Use user/pass for local development with Local Author Env return require('./proxy/setupProxy.spa-editor.auth.basic'); ...
Tenga en cuenta que cualquier cambio en src/setupProxy.js
o en sus archivos de referencia requiere un reinicio del SPA.
Recurso de SPA estático
Los recursos de SPA estáticos, como el logotipo de WKND y la carga de gráficos, deben tener actualizadas sus URL de origen para forzar su carga desde el host de SPA remoto. Si se deja en relación, cuando el SPA se carga en el Editor de SPA para la creación, estas URL usan de forma predeterminada el host de AEM en lugar del SPA, lo que da como resultado 404 solicitudes, como se muestra en la imagen siguiente.
Para resolver este problema, haga que un recurso estático alojado por la SPA remota utilice rutas absolutas que incluyan el origen de la SPA remota.
-
Abra el proyecto SPA en su IDE
-
Abra el archivo de variables de entorno de la SPA
src/.env.development
y agregue una variable para el URI público de la SPA:code language-none ... # The base URI the SPA is accessed from REACT_APP_PUBLIC_URI=http://localhost:3000
Al implementar en AEM as a Cloud Service, debe hacer lo mismo con los
.env
archivos correspondientes. -
Abrir el archivo
src/App.js
-
Importar el URI público de la SPA desde las variables de entorno de la SPA
code language-javascript const { REACT_APP_PUBLIC_URI } = process.env; function App() { ... }
-
Agregue a
REACT_APP_PUBLIC_URI
el prefijo del logotipo de WKND<img src=.../>
para forzar la resolución según la SPA.code language-html <img src={REACT_APP_PUBLIC_URI + '/' + logo} className="logo" alt="WKND Logo"/>
-
Haga lo mismo para cargar la imagen en
src/components/Loading.js
code language-javascript const { REACT_APP_PUBLIC_URI } = process.env; class Loading extends Component { render() { return (<div className="loading"> <img src={REACT_APP_PUBLIC_URI + '/' + loadingIcon} alt="Loading..." /> </div>); } }
-
Y para las dos instancias del botón Atrás en
src/components/AdventureDetails.js
code language-javascript const { REACT_APP_PUBLIC_URI } = process.env; function AdventureDetail(props) { ... render() { <img className="Backbutton-icon" src={REACT_APP_PUBLIC_URI + '/' + backIcon} alt="Return" /> } }
Los archivos App.js
, Loading.js
y AdventureDetails.js
deben tener el siguiente aspecto:
Cuadrícula interactiva de AEM
Para admitir el modo de diseño del Editor de SPA para áreas editables en la SPA, debemos integrar CSS de cuadrícula interactiva de AEM en la SPA. No se preocupe: este sistema de cuadrícula solo se aplica a los contenedores editables y puede utilizar el sistema de cuadrícula que desee para controlar el diseño del resto de su SPA.
Añada los archivos SCSS de cuadrícula interactiva de AEM a la SPA.
-
Abra el proyecto SPA en su IDE
-
Descargar y copiar los dos archivos siguientes en
src/styles
- _grid.scss
- Generador CSS de cuadrícula interactiva de AEM
- _grid-init.scss
- Invoca
_grid.scss
mediante los puntos de interrupción específicos del SPA (escritorio y móvil) y las columnas (12).
- Invoca
- _grid.scss
-
Abrir
src/App.scss
e importar./styles/grid-init.scss
code language-scss ... @import './styles/grid-init'; ...
Los archivos _grid.scss
y _grid-init.scss
deben tener el siguiente aspecto:
Ahora, el SPA incluye el CSS necesario para admitir el modo de diseño de AEM para los componentes agregados a un contenedor de AEM.
Clases de utilidad
Copie las siguientes clases de utilidades en el proyecto de aplicación React.
- RoutedLink.js a
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/RoutedLink.js
- EditorPlaceholder.js a
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/util/EditorPlaceholder.js
- withConditionalPlaceholder.js a
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/util/withConditionalPlaceholder.js
- withStandardBaseCssClass.js a
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/util/withStandardBaseCssClass.js
Inicio del SPA
Ahora que la SPA está preparada para la integración con AEM, ejecutemos la SPA y veamos cómo se ve.
-
En la línea de comandos, vaya a la raíz del proyecto de la SPA
-
Inicie la SPA con los comandos normales (si aún no lo ha hecho)
code language-shell $ cd ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app $ npm install $ npm run start
-
Examine la SPA en http://localhost:3000. ¡Todo debería quedar bien!
Abra la SPA en AEM SPA Editor
Con la SPA en ejecución en http://localhost:3000, vamos a abrirla con el Editor de SPA de AEM. Todavía no se puede editar nada en la SPA, esto solo valida la SPA en AEM.
-
Iniciar sesión en AEM Author
-
Vaya a Sitios > Aplicación WKND > us > en
-
Seleccione la página de inicio de la aplicación WKND, pulse Editar y aparecerá el SPA.
-
Cambiar a vista previa mediante el conmutador de modo en la parte superior derecha
-
Haga clic en torno al SPA
Enhorabuena.
¡Ha arrancado el SPA remoto para que sea compatible con el Editor de SPA de AEM! Ahora ya sabe cómo:
- Añadir las dependencias npm de AEM SPA Editor JS SDK al proyecto de SPA
- Configuración de las variables de entorno de la SPA
- Integración de la API de ModelManager con la SPA
- Configure un proxy interno para la SPA de modo que enrute las solicitudes de contenido adecuadas a AEM
- Solucionar problemas con recursos de SPA estáticos en el contexto del Editor de SPA
- Añada el CSS de cuadrícula interactivo de AEM para admitir el diseño en los contenedores editables de AEM
Siguientes pasos
Ahora que hemos alcanzado una línea de base de compatibilidad con AEM SPA Editor, podemos empezar a introducir áreas editables. Primero se busca cómo colocar un componente editable fijo en la SPA.