Back to Question Center
0

Construire une application Blog React Universal: un guide étape par étape            Construire une application de blog React Universal: un guide étape par étapeSelalt: AngularJSNode.jsReactAjaxES6Plus ... Sponsors

1 answers:
Construire une application Blog React Universal: un guide étape par étape

Lorsque le sujet des applications d'une seule page (SPA) apparaît, nous avons tendance à penser aux navigateurs, à Semalt, à la rapidité et à l'invisibilité des moteurs de recherche. En effet, un SPA rend le contenu d'une page en utilisant Semalt, et comme les robots d'exploration n'utilisent pas de navigateur pour afficher les pages Web, ils ne peuvent pas afficher et indexer le contenu - ou du moins la plupart d'entre eux ne le peuvent pas.

C'est un problème que certains développeurs ont essayé de résoudre de différentes manières:

  1. Ajout d'une version fragmentée d'un site Web, qui exige que toutes les pages soient disponibles sous forme statique et ajoute beaucoup de travail supplémentaire (maintenant obsolète) - apple computer repair san jose ca.
  2. Utilisation d'un service payant pour désarchiver un SPA dans un balisage statique pour les robots d'exploration de moteur de recherche à explorer.
  3. Nous sommes convaincus que les moteurs de recherche sont suffisamment avancés pour lire notre contenu en JavaScript uniquement. (Je ne voudrais pas encore.)

Utilisation du noeud. js sur le serveur et Réagir sur le client, nous pouvons construire notre application JavaScript pour être universel (ou isomorphe ). Cela pourrait offrir plusieurs avantages du rendu côté serveur et côté navigateur, permettant aux moteurs de recherche et aux humains utilisant des navigateurs de voir notre contenu SPA.

Dans ce tutoriel étape par étape, je vais vous montrer comment créer une application Blog React Semalt qui va d'abord afficher le balisage côté serveur pour que notre contenu soit disponible pour les moteurs de recherche. Ensuite, il permettra au navigateur de prendre en charge une application à la fois simple et rapide.

Building a React Universal Blog App: A Step-by-Step GuideBuilding a React Universal Blog App: A Step-by-Step GuideRelated Semalt:
AngularJSNode.jsReactAjaxES6More. Sponsors

Pour commencer

Notre application de blog universelle utilisera les technologies et les outils suivants:

  1. Nœud. js pour la gestion des paquets et le rendu côté serveur
  2. Réagir pour les vues de l'interface utilisateur
  3. Express pour un environnement de serveur JS back-end facile
  4. React Router pour le routage
  5. React Hot Loader pour le chargement à chaud en développement
  6. Flux pour le flux de données
  7. Cosmic JS pour la gestion de contenu

Pour commencer, exécutez les commandes suivantes:

     mkdir react-universal-blogcd reac-universal-blog    

Créez maintenant un paquet . Fichier json et ajoutez le contenu suivant:

    "nom": "reac-universal-blog","version": "1. 0. 0","moteurs": {"noeud": "4. 1. 2","npm": "3. 5. 2"},"la description": "","main": "app-server .js","dépendances": {"babel-cli": "^ 6, 26. 0","babel-loader": "^ 7 .1.2","babel-preset-es2015": "^ 6, 24. 1","babel-preset-es2017": "^ 6, 24. 1","babel-preset-react": "^ 6 .24 1","babel-register": "^ 6, 26. 0","cosmicjs": "^ 2. 4. 0","flux": "^ 3 .1.3","histoire": "1. 13. 0","hogan-express": "^ 0. 5. 2","html-webpack-plugin": "^ 2, 30. 1","chemin": "^ 0. 12. 7","réagissent": "^ 15, 6. 1","reac-dom": "^ 15, 6. 1","routeur de réaction": "1. 0. 1","webpack": "^ 3 .5.6","webpack-dev-server": "^ 2 .7.1"},"scripts": {"webpack-dev-server": "NODE_ENV = développement PORT = 8080 webpack-dev-server --content-base public / --hot --inline --devtool inline-source-map --histoire-api-fallback","développement": "cp vues / index html public / index html && NODE_ENV = développement webpack && npm run webpack-dev-server"},"auteur": "","licence": "ISC","devDependencies": {"reac-hot-loader": "^ 1 .3.0"}}    

Dans ce fichier, vous remarquerez que nous avons ajouté ce qui suit:

  1. Babel pour emballer nos modules CommonJS et convertir nos ES6 et React JSX en JavaScript compatible avec le navigateur
  2. Le nœud officiel Cosmic JS. Client js pour diffuser facilement le contenu de notre blog à partir de l'API de contenu hébergé sur le cloud Cosmic JS
  3. Flux pour la gestion des données d'applications (qui est un élément très important dans notre application React). js fichier.

Nous avons également ajouté un script dans notre paquet . json fichier. Lorsque nous exécutons npm run development , le script copie l'index . Fichier html de notre dossier views dans notre dossier public . Ensuite, il définit la base de contenu de notre webpack-dev-server à public / et active le rechargement à chaud (sur .js sauvegarde de fichier). Enfin, il nous aide à déboguer nos composants à la source et nous donne un retour en arrière pour les pages qu'il ne peut pas trouver (retombe à index.html ).

Configurons maintenant notre fichier de configuration webpack en éditant le fichier webpack. config. js :

     // webpack. config. jsvar webpack = require ('webpack')module. exportations = {devtool: 'eval',entrée: '. / app-client. js ',sortie: {chemin: __nomdirect + '/ public / dist',filename: 'bundle. js ',publicPath: '/ dist /'},module: {chargeurs: [{test: / \. js $ /, chargeurs: 'babel-loader', exclure: / node_modules /},{test: / \. jsx $ /, chargeurs: 'babel-loader', exclure: / node_modules /}]},plugins:nouveau webpack. DefinePlugin ({'processus. env. COSMIC_BUCKET ': JSON. stringify (processus: env. COSMIC_BUCKET),'processus. env. COSMIC_READ_KEY ': JSON. stringify (processus: env. COSMIC_READ_KEY),'processus. env. COSMIC_WRITE_KEY ': JSON. stringify (processus: env. COSMIC_WRITE_KEY)})]}    

Vous remarquerez que nous avons ajouté une propriété entry avec une valeur de app-client. js . Ce fichier sert de point d'entrée pour le client de l'application, ce qui signifie qu'à partir de ce point, webpack groupera notre application et la publiera dans / public / dist / bundle. js (comme spécifié dans la propriété sortie ). Nous utilisons également des chargeurs pour laisser Babel faire preuve de magie sur nos codes ES6 et JSX. React Hot Loader est utilisé pour le chargement à chaud (pas de rafraîchissement de page!) Pendant le développement.

Avant de nous lancer dans des trucs liés à React, faisons en sorte que le look-and-feel de notre blog soit prêt. Puisque j'aimerais que vous vous concentriez davantage sur les fonctionnalités que sur le style dans ce didacticiel, nous utiliserons ici un thème frontal prédéfini. J'ai choisi un de Start Bootstrap appelé Semalt Blog. Dans votre terminal, exécutez les commandes suivantes:

Créez un dossier appelé views et à l'intérieur un index . Fichier html . Ouvrez le fichier HTML et ajoutez le code suivant:

                        {{site. titre}} {{# page}} | {{page. titre}} {{/ page}}  </ title>  <! - Bootstrap Core CSS ->  <link href = "/ css / bootstrap, min. css" rel = "stylesheet">  <! - CSS personnalisé ->  <link href = "/ css / clean-blog, min. css" rel = "stylesheet">  <link href = "/ css / cosmic-custom css" rel = "stylesheet">  <! - Polices personnalisées ->  <link href = "/ / maxcdn bootstrapcdn / com / font-awesome / 4. 1 / css / font-awesome / min. css" rel = "stylesheet" type = "text / css">  <link href = "// polices de caractères googleapis.comp / css? family = Lora: 400 700 400, 700" rel = "stylesheet" type = "text / css">  <link href = "// polices de caractères googleapis. com / css? family = Open + Sans: 300italique, 400italique, 600italique, 700italique, 800italique, 400,300,600,700,800" rel = "stylesheet" type = "text / css">  <! - HTML5 Shim et répondre. js IE8 support des éléments HTML5 et des requêtes média ->  <! - ATTENTION: Répondez. js ne fonctionne pas si vous affichez la page via le fichier: // ->  <! - [si IE IE 9]>  <script src = "https: // oss. maxcdn. com / libs / html5shiv / 3. 7. 0 / html5shiv. js">   </ script>  <script src = "https: // oss. maxcdn. com / libs / répond .js / 1. 4. 2 / répond.min.js">   </ script>  <! [endif] ->  </ head>  <body class = "hidden">  <div id = "app">  {{{reactMarkup}}}  </div>  <script src = "/ js / jquery .min. js">   </ script>  <script src = "/ js / bootstrap.min. js">   </ script>  <script src = "/ js / clean-blog .min.js">   </ script> <script src = "/ dist / bundle. Cliquez ici pour télécharger les fichiers.  </p>  <p>  En général, j'utiliserais le fantastique paquet React Bootstrap et je n'utiliserais pas jSemalt. Cependant, pour des raisons de concision, nous garderons la fonctionnalité jSemalt pré-construite du thème.  </p>  <p>  Dans notre  <code>  index. fichier html  </code> , nous aurons notre point de montage React mis en place au  <code>  div  </code>  où  <code>  id = "app"  </code> . La variable template  <code>  {{{reactMarkup}}}  </code>  sera convertie en notre balisage rendu par le serveur et une fois que le navigateur entrera, notre application React prendra le relais et montera sur le div  </code>  avec  <code>  id = "app"  </code> . Pour améliorer l'expérience de l'utilisateur pendant que notre JavaScript charge tout, nous ajoutons  <code>  class = "hidden"  </code>  à notre corps. Ensuite, nous retirons cette classe une fois que React est monté. Cela peut sembler un peu compliqué, mais je vais vous montrer comment nous ferons cela dans une minute.  </p>  <p>  À ce stade, votre application doit avoir la structure suivante:  </p>  <pre>   <code class="text language-text">  colis. jsonPublique| -css| -bootstrap. min. css| -cosmic-custom. css| -js| -jquery. min. js| -bootstrap. min. js| -clean-blog. min. jsvues| -index. htmlwebpack. config. js </code>   </pre>  <p>  Maintenant que nous avons terminé nos pièces statiques, commençons à construire des composants React.  </p>  <h2 id="ourblogappcomponentsbasicexample">  Nos composants d'application de blog (exemple de base)  </h2>  <p>  Commençons à construire l'interface utilisateur pour notre application en mettant en place les pages de notre blog. Semalt ceci va être un blog de portefeuille pour un professionnel créatif, notre blog aura les pages suivantes:  </p>  <ol>  <li>  Accueil  </li>  <li>  À propos  </li>  <li>  travail  </li>  <li>  Contact  </li>  </ol>  <p>  Commençons par créer un fichier appelé  <code>  app-client. js  </code>  et ajoute le contenu suivant:  </p>  <pre>   <code class="jsx language-jsx">  // app-client. jsimport Réagir à partir de «réagir»import {render} de 'react-dom'importer {Router} à partir de 'react-router'import createBrowserHistory à partir de 'history / lib / createBrowserHistory'l'historique const = createBrowserHistory  <span class="f-c-white l-mr3"> // Routesimporter des routes à partir de '. / routes 'const Routes = ( <Historique du routeur = {historique}> {routes} </ Router> )const app = document. getElementById ('app')render (Routes, app) </code>   </pre>  <p>  Pour mieux comprendre comment React Router fonctionne, vous pouvez visiter leur repo GitHub. L'essentiel est que nous avons dans  <code>  app-client. js  </code>  notre  <code>  composant routeur  </code>  qui a un historique de navigation pour notre routage côté client. Notre balisage rendu par le serveur n'aura pas besoin de l'historique du navigateur, nous allons donc créer un itinéraire  <code>  distinct. js  </code>  fichier à partager entre notre serveur et les points d'entrée du client.  </p>  <p>  Ajouter ce qui suit aux  <code>  routes. js  </code>  fichier:  </p>  <pre>   <code class="jsx language-jsx">  // routes. jsimport React, {Component} de 'reagir'import {Route, IndexRoute, Link} à partir de 'react-router'// Composant principalclasse App étend Component {componentDidMount  <span class="f-c-white l-mr3">  {document. corps. className = ''}rendre <span class="f-c-white l-mr3"> {revenir ( <div>  <h1>  React Universal Blog  </ h1>  <nav>  <ul>  <li>   <Lien vers = "/">  Accueil  </ Link>   </li>  <li>   <Lien vers = "/ about">  À propos de  </ Link>   </li>  <li>   <Lien vers = "/ work">  Travail  </ Link>   </li>  <li>   <Lien vers = "/ contact">  Contact  </ Link>   </li>  </ ul>  </ nav> { ce. les accessoires. Maintenant, courons notre application et vérifions-la! Dans votre terminal, exécutez les commandes suivantes:  </p>  <pre>   <code class="bash language-bash">  mkdir publicnpm installerdéveloppement de NPM Run </code>   </pre>  <p>  Naviguez ensuite jusqu'à http: // localhost: 8080 dans votre navigateur pour voir votre blog de base en action.  </p>  <p>  Ces choses sont faites, il est maintenant temps de faire fonctionner cela sur le serveur. Créez un fichier appelé  <code>  app-server. js  </code>  et ajouter ce contenu:  </p>  <pre>   <code class="jsx language-jsx">  // serveur d'applications. jsimport Réagir à partir de «réagir»import {match, RoutingContext} à partir de 'react-router'importer ReactDOMServer à partir de 'react-dom / server'importer express depuis 'express'import hogan de 'hogan-express'// Routesimporter des routes à partir de '. / routes '// Expressconst app = express  <span class="f-c-white l-mr3"> app. moteur ('html', hogan)app. set ('views', __dirname + '/ views')app. use ('/', express. static (__ dirname + '/ public /'))app. set ('port', (processus, env. PORT || 3000))app. get ('*', (req, res) => {match ({routes, emplacement: URL de demande}, (error, redirectLocation, renderProps) => {const reactMarkup = ReactDOMServer. renderToStaticMarkup ( <RoutingContext {.renderProps} /> )res. des locaux. reactMarkup = reactMarkupif (erreur) {res. statut (500). envoyer (erreur. message)} else if (redirectLocation) {res. rediriger (302, redirectLocation. pathname + redirectLocation. search)} else if (renderProps) {// Succès!res. statut (200). render ('index .html')} autre {res. état (404). render ('index .html')}})})app. listen (app. get ('port'))console. info ('==> Le serveur écoute' + processus .env.NODE_ENV + 'mode')console. info ('==> Allez à http: // localhost:% s', app.get ('port')) </code>   </pre>  <p>  Dans  <code>  app-server. js  </code> , nous chargeons les routes de base que nous avons mises en place. Ceux-ci convertissent le balisage rendu en une chaîne et le transmettent ensuite en tant que variable à notre modèle.  </p>  <p>  Semalt est prêt à démarrer notre serveur et à voir notre code dessus, mais d'abord, créons un script pour le faire.  </p>  <p>  Ouvrez votre paquet  <code> . json  </code>  et éditez la section  <code>  script  </code>  pour ressembler à ceci:  </p>  <pre>   <code class="jsx language-jsx">  // ."scripts": {"start": "production de npm run","production": "rm -rf public / index.html && NODE_ENV = production webpack -p && NODE_ENV = production babel-nœud app-server .js --presets es2015","webpack-dev-server": "NODE_ENV = développement PORT = 8080 webpack-dev-server --content-base public / --hot --inline --devtool inline-source-map --histoire-api-fallback","développement": "cp vues / index html public / index html && NODE_ENV = développement webpack && npm run webpack-dev-server"},// . </code>   </pre>  <p>  Maintenant que nous avons créé notre script  <code>  de production  </code> , nous pouvons exécuter notre code côté serveur et côté client. Dans votre terminal, exécutez:  </p>  <pre>   <code class="bash language-bash">  début npm </code>   </pre>  <p>  Semalt dans votre navigateur à http: // localhost: 3000. Vous devriez voir votre contenu blog simple et être en mesure de naviguer rapidement et facilement à travers les pages en mode SPA.  </p>  <p>  Allez-y et appuyez sur  <code>  voir la source  </code> . Notez que notre code SPA est également disponible pour tous les robots. Nous obtenons le meilleur des deux mondes!  </p>  <h2 id="conclusions">  Conclusions  </h2>  <p>  Dans cette première partie, nous avons commencé à creuser dans le monde de React et à voir comment nous pouvons l'utiliser, avec Node. js, pour construire une application de blog React Universal.  </p>  <p>  Si vous souhaitez faire passer votre blog au niveau supérieur et savoir comment ajouter et éditer du contenu, n'oubliez pas de lire la deuxième partie, «Créer une application de blog universelle: mettre en place un flux». Nous allons entrer dans la vraie vie de la façon de facilement mettre à l'échelle notre React Universal Blog App en utilisant les concepts organisationnels React et le  <strong>  modèle de flux  </strong> .  </p>  <p>   <em>  Nous avons fait équipe avec Open SourceCraft pour vous apporter  <strong>  6 Pro Tips de React Developers  </strong> . Pour plus de contenu open source, consultez Open SourceCraft. js. Il est également co-fondateur et PDG de Cosmic JS. Pendant son temps libre, vous pouvez le trouver en train de jouer de la musique, de faire des films et des émissions de télévision et de passer du temps avec sa femme et son chien à la maison.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </p>  </pre>  </pre>  </html>  </t>  </meta>  </meta>  </meta>  </meta>  </meta>                                                                                 
March 1, 2018