De externe SPA voor SPA Editor Bootstrappen

Voordat de bewerkbare gebieden aan de externe SPA kunnen worden toegevoegd, moet deze worden opgepakt met de AEM SPA Editor JavaScript SDK en enkele andere configuraties.

Npm-afhankelijkheden voor AEM editor voor JS SDK installeren

Eerst, herzie AEM npm gebiedsdelen voor het project van de Reactie, en installeer hen.

$ 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

SPA omgevingsvariabelen bekijken

Verschillende omgevingsvariabelen moeten worden blootgesteld aan de externe SPA zodat deze weet hoe ze met AEM moeten werken.

  1. Open Verre SPA project bij ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app in uw winde

  2. Het bestand openen .env.development

  3. Let in het bestand op de toetsen en werk de bestanden zo nodig bij:

    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
    

    Verre SPA Milieu Variabelen

    herinner dat de variabelen van het douanemilieu in Reageren met REACT_APP_ moeten worden vooraf bepaald.

    • REACT_APP_HOST_URI: het schema en de gastheer van de AEM dienst de Verre SPA verbindt met.

      • Deze waarde verandert op basis van het type AEM (lokaal, Ontwikkelen, Werkgebied of Productie) en AEM Service (Auteur versus Publish).
    • REACT_APP_USE_PROXY: hiermee worden CORS-problemen tijdens de ontwikkeling voorkomen door de responsontwikkelingsserver te informeren over proxyverzoeken AEM zoals /content, /graphql, .model.json using http-proxy-middleware module.

    • REACT_APP_AUTH_METHOD: verificatiemethode voor door AEM verzonden aanvragen, opties zijn 'service-token', 'dev-token', 'basic' of blanco laten voor gebruiksscenario zonder verificatie

      • Vereist voor gebruik met AEM auteur
      • Mogelijk vereist voor gebruik met AEM Publish (als de inhoud is beveiligd)
      • Ontwikkelen tegen de AEM SDK ondersteunt lokale accounts via Basic Auth. Dit is de methode die in deze zelfstudie wordt gebruikt.
      • Wanneer het integreren met AEM as a Cloud Service, gebruik toegangstokens
    • REACT_APP_BASIC_AUTH_USER: de AEM gebruikersbenaming door de SPA voor authentiek te verklaren terwijl het terugwinnen van AEM inhoud.

    • REACT_APP_BASIC_AUTH_PASS: het AEM wachtwoord door de SPA voor authentiek te verklaren terwijl het terugwinnen van AEM inhoud.

De ModelManager-API integreren

Met de AEM SPA npm-afhankelijkheden die beschikbaar zijn voor de app, initialiseert u AEM ModelManager in het project index.js voordat ReactDOM.render(...) wordt aangeroepen.

ModelManageris verantwoordelijk voor het verbinden met AEM aan het terugwinnen van editable inhoud.

  1. Open het Verre SPA project in uw winde

  2. Het bestand openen src/index.js

  3. Importeren ModelManager toevoegen en initialiseren voordat root.render(..) wordt aangeroepen,

    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 />);
    

Het bestand src/index.js moet er als volgt uitzien:

src/index.js

Een interne SPA instellen

Wanneer het creëren van een editable SPA, is het best aan opstelling een interne volmacht in de SPA, die wordt gevormd om de aangewezen verzoeken aan AEM te leiden. Dit wordt gedaan door http-proxy-middlewarete gebruiken npm module, die reeds door de basisWKND GraphQL App geïnstalleerd is.

  1. Open het Verre SPA project in uw winde

  2. Open het bestand op src/proxy/setupProxy.spa-editor.auth.basic.js

  3. Werk het bestand bij met de volgende code:

    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();
        });
    };
    

    Het bestand setupProxy.spa-editor.auth.basic.js moet er als volgt uitzien:

    src/proxy/setupProxy.spa-editor.auth.basic.js

    Deze proxyconfiguratie heeft twee belangrijke functies:

    1. Vermeldt specifieke verzoeken aan de SPA (http://localhost:3000) aan AEM http://localhost:4502

      • Het is alleen proxy's waarvan de paden overeenkomen met patronen die aangeven dat ze moeten worden AEM, zoals gedefinieerd in toAEM(path, req) .
      • Het herschrijft SPA paden naar hun overeenkomstige AEM pagina's, zoals gedefinieerd in pathRewriteToAEM(path, req)
    2. CORS-koppen worden toegevoegd aan alle aanvragen om toegang tot AEM inhoud toe te staan, zoals gedefinieerd door res.header("Access-Control-Allow-Origin", REACT_APP_HOST_URI);

      • Als dit niet wordt toegevoegd, treden CORS-fouten op bij het laden van AEM inhoud in de SPA.
  4. Het bestand openen src/setupProxy.js

  5. Controleer de regel die naar het configuratiebestand van de proxy setupProxy.spa-editor.auth.basic verwijst:

    code language-none
    ...
    case BASIC:
    // Use user/pass for local development with Local Author Env
    return require('./proxy/setupProxy.spa-editor.auth.basic');
    ...
    

Opmerking: als de src/setupProxy.js -bestanden of de bestanden waarnaar wordt verwezen, worden gewijzigd, moet de SPA opnieuw worden opgestart.

Statische SPA

Statische SPA bronnen zoals het WKND-logo en het laden van afbeeldingen moeten hun URL's van de bron laten bijwerken om te zorgen dat deze worden geladen vanaf de host voor de externe SPA. Als de SPA relatief links is en in SPA Editor wordt geladen om te worden ontworpen, gebruiken deze URL's standaard AEM host in plaats van de SPA. Dit resulteert in 404 aanvragen, zoals in de onderstaande afbeelding wordt geïllustreerd.

Gebroken statische middelen

Om deze kwestie op te lossen, maak een statische die bron door de Verre SPA wordt ontvangen absolute wegen gebruiken die de Verre SPA oorsprong omvatten.

  1. Open het SPA project in uw winde

  2. Open het bestand met SPA omgevingsvariabelen src/.env.development en voeg een variabele toe voor de SPA openbare URI:

    code language-none
    ...
    # The base URI the SPA is accessed from
    REACT_APP_PUBLIC_URI=http://localhost:3000
    

    wanneer het opstellen aan AEM as a Cloud Service, moet u het zelfde voor de overeenkomstige .env dossiers.

  3. Het bestand openen src/App.js

  4. Importeer de SPA public URI uit de SPA omgevingsvariabelen

    code language-javascript
    const {  REACT_APP_PUBLIC_URI } = process.env;
    
    function App() { ... }
    
  5. Plaats het WKND-logo <img src=.../> in REACT_APP_PUBLIC_URI om de resolutie in te stellen op de SPA.

    code language-html
    <img src={REACT_APP_PUBLIC_URI + '/' +  logo} className="logo" alt="WKND Logo"/>
    
  6. Doe hetzelfde voor het laden van de afbeelding in 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>);
        }
    }
    
  7. En voor de twee instanties van de achterknoop in 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" />
        }
    }
    

De bestanden App.js , Loading.js en AdventureDetails.js moeten er als volgt uitzien:

Statische middelen

AEM responsief raster

Om SPA de lay-outwijze van de Redacteur voor editable gebieden in de SPA te steunen, moeten wij AEM het Responsieve Net CSS in de SPA integreren. Maak u geen zorgen - dit rastersysteem is alleen van toepassing op de bewerkbare containers en u kunt uw keuzerondje in het raster gebruiken om de lay-out van de rest van uw SPA te bepalen.

Voeg de AEM Responsieve Raster SCSS-bestanden toe aan de SPA.

  1. Open het SPA project in uw winde

  2. De volgende twee bestanden downloaden en kopiëren naar src/styles

    • _grid.scss
      • De AEM Responsieve generator van het Net SCSS
    • _grid-init.scss
      • Roept _grid.scss aan gebruikend de SPA specifieke breekpunten (Desktop en mobiel) en kolommen (12).
  3. Openen src/App.scss en importeren ./styles/grid-init.scss

    code language-scss
    ...
    @import './styles/grid-init';
    ...
    

De bestanden _grid.scss en _grid-init.scss moeten er als volgt uitzien:

AEM Responsieve het Net SCSS

Nu bevat de SPA de CSS die nodig is om AEM Lay-outmodus te ondersteunen voor componenten die aan een AEM-container zijn toegevoegd.

Hulpprogrammaklassen

Kopieer in de volgende hulpprogrammaklassen naar uw Reactie-app-project.

  • RoutedLink.jsaan ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/RoutedLink.js
  • EditorPlaceholder.jsaan ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/util/EditorPlaceholder.js
  • withConditionalPlaceholder.jsaan ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/util/withConditionalPlaceholder.js
  • withStandardBaseCssClass.jsaan ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app/src/components/editable/core/util/withStandardBaseCssClass.js

Verre SPA hulpprogrammaklassen

De SPA starten

Nu de SPA is opgepakt voor integratie met AEM, laten we de SPA uitvoeren en zien hoe het eruit ziet!

  1. Navigeer op de opdrachtregel naar de hoofdmap van het SPA project

  2. Start de SPA met de normale opdrachten (als u dat nog niet hebt gedaan).

    code language-shell
    $ cd ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app
    $ npm install
    $ npm run start
    
  3. Blader de SPA op http://localhost:3000. Alles moet er goed uitzien!

SPA lopend op http://localhost:3000

De SPA openen in AEM SPA Editor

Met de SPA die op http://localhost:3000lopen, open het gebruikend AEM Redacteur. Niets is editable in de SPA nog, bevestigt dit slechts de SPA in AEM.

  1. Aanmelden bij AEM auteur

  2. Navigeer aan Plaatsen > App WKND > gebruiken > en

  3. Selecteer de WebND pagina van het Huis van de App en tikken uitgeven, en de SPA verschijnt.

    geeft WKND App Homepage uit

  4. Schakelaar aan Voorproef gebruikend de wijzeschakelaar in het hoogste recht

  5. Klik om de SPA

    SPA lopend op http://localhost:3000

Gefeliciteerd!

U hebt de Verre SPA opgepakt om compatibel SPA Redacteur AEM te zijn! Nu weet u hoe:

  • Voeg de gebiedsdelen van JS SDK npm van de Redacteur van de AEM aan het SPA project toe
  • De SPA omgevingsvariabelen configureren
  • De ModelManager-API integreren met de SPA
  • Opstelling een interne volmacht voor de SPA zodat leidt het de aangewezen inhoudverzoeken om te AEM
  • Problemen met statische SPA oplossen in de context van SPA Editor
  • CSS voor AEM responsieve raster toevoegen ter ondersteuning van lay-out in AEM bewerkbare containers

Volgende stappen

Nu we een basislijn voor compatibiliteit met AEM SPA Editor hebben bereikt, kunnen we bewerkbare gebieden gaan introduceren. Wij kijken eerst hoe te om a vaste editable componentin de SPA te plaatsen.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4