Formation « Développer des blocs Gutenberg sur mesure avec React »

Create-block : une librairie pour démarrer rapidement ses projets Gutenberg

Lecture : 6 minutes • 15

Node.js utilise généralement webpack, afin de compiler ses fichiers. Et ça peut vite être un casse-tête à configurer ! Heureusement, tout va être extrêmement simple avec la librairie officielle de WordPress : create-block.

Aujourd’hui, pour faire du JavaScript moderne, on a besoin d’outils en tous genres pour vérifier et compiler le code afin de le rendre compatible avec tous les navigateurs.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

Et tout cela nécessite généralement pas mal d’outils et beaucoup de configuration notamment via webpack, un outil qui permet d’orchestrer la compilation des différents fichiers en ressources statiques comprises par le navigateur.

On dit généralement que webpack est un module bundler pour JavaScript.

Le site internet de webpack.
Le site web de webpack montre un schéma permettant de comprendre le bundling

Create-block est un toolkit officiel créé par les contributeurs WordPress, basé sur Webpack, Node.js et NPM.

Il ne nécessite aucune configuration préalable et va mettre en place toute la structure nécessaire au développement de blocs Gutenberg avec React.

Il contient notamment plusieurs outils comme :

  • webpack : qui va permettre de surveiller notre dossier et lancer les opérations nécessaires lors d’un changement de fichier ;
  • Babel : qui compile le javascript moderne et en crée une version rétrocompatible ;
  • React : la librairie JS de facebook utilisée par Gutenberg pour gérer l’éditeur visuel ;
  • JSLint : qui permet de vérifier que notre code ne contient pas d’erreur ;
  • Sass : le préprocesseur CSS qui compile nos syntaxes améliorées en CSS classique ;

En d’autre termes, on installe le projet, on lance le compilateur, on commence à coder, et on oublie les soucis. Et ça, ça me plait !

Préparer un site local

Avant de vous lancer dans cette formation, je vous invite à installer un site local dédié à l’apprentissage des blocs.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

Pour cela, je vous recommande l’excellent LocalWP de WP Engine qui est gratuit et qui contient tout le nécessaire pour faire tourner WordPress sur votre machine.

L'interface du logiciel Local WP montrant la liste des sites installés.
Installez un site sur votre machine en 3 clics via Local

LocalWP est disponible sur Windows, Mac et Linux. Pour le télécharger, c’est par ici :

Télécharger gratuitement LocalWP

Si c’est votre premier site, je vous invite à consulter le cours sur l’installation d’un site local de la formation Full Site Editing.

Alternativement, vous pouvez également utiliser DevKinsta ou encore Mamp si vous préférez.

Installer create-block et générer l’extension

Pour déclarer nos blocs Gutenberg, on va devoir créer une extension.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

C’est la bonne pratique officielle : c’est aux extensions de gérer les fonctionnalités supplémentaires de votre site, pas votre thème, car nos blocs sont considérés comme des fonctionnalités.

Mais pas d’inquiétude, puisque create-blocks va préparer la base de notre extension automatiquement ! C’est justement ce que l’on va voir tout de suite.

Rendez-vous dans le dossier /app/public/wp-content/plugins/ de votre site local grâce au bouton « Site Folder » de LocalWP.

De là, on va ouvrir notre Terminal afin de lancer la commande d’installation. Sur Mac OS, vous pouvez faire un clic droit sur le dossier « Plugins » et sélectionner « Nouveau terminal au dossier ».

Ouvrir une fenêtre de terminal dans un dossier en particulier.
Sur Mac OS, faites un clic droit sur le dossier et sélectionnez Nouveau terminal

Maintenant, on va saisir la commande suivante :

Plain Text

Vous pouvez bien entendu remplacer capitaine-blocks par le nom de dossier que vous souhaitez donner à votre extension.

Le terminal affiche la commande nécessaire à l'installation de l'extension et des scripts de compilation.
Lancez cette commande pour installer l’extension et le compilateur

Validez ensuite en appuyant sur « Entrée », validez en appuyant sur Y lorsque vous verrez « Ok to proceed ? » puis Entrée à nouveau et attendez quelques secondes.

Le terminal affiche une série d'instructions, puis indique qu'il a bien terminé toutes ses tâches.
Le terminal a terminé avec succès l’installation de l’extension

Si tout s’est bien passé, vous devriez voir une ligne en vert commençant par « Done ».

Notez que le terminal vous explique qu’il existe plusieurs commandes rattachées au compilateur, comme :

  • npm start : pour démarrer le compilateur et travailler sur vos blocs ;
  • npm run build pour créer une version optimisée des scripts parée pour la production.

Maintenant, fermez votre terminal et ouvrez le dossier fraîchement créé dans votre éditeur de code favori : VS Code, Cursor, WebStorm

Conseil

Je vous recommande de passer à Cursor, car son intégration de l’IA est vraiment la plus performante du marché.

Pour plus d’informations sur create-blocks, consultez la documentation, elle contient tous les détails sur ce package WordPress indispensable.

Activer votre extension

En parallèle, rendez-vous dans le menu « Extensions » de l’interface d’administration de WordPress et activez votre nouvelle extension.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

Sinon, vous allez vous demander pourquoi vous ne voyez pas vos blocs dans l’éditeur ! Et franchement, ça m’est arrivé au moins mille fois.

L'écran de gestion des extensions de WordPress. Notre extension est désormais activée.
Pensez bien à activer votre extension fraîchement créée

Vérifier que le slug d’extension n’est pas déjà pris sur .org

Vous savez ce qu’il m’est arrivé un jour ? À peine mon extension installé, WordPress m’informe qu’il y a une mise à jour de disponible. Impossible ! Et pourtant…

La raison est toute simple : j’ai utilisé le même slug qu’une extension déjà présente sur le répertoire officiel des extensions sur wordpress.org.

Pour éviter que cela vous arrive, vérifiez d’abord que le nom de dossier ne corresponde pas à une extension du répertoire. Pour cela, faites simplement une recherche depuis le répertoire WordPress :

Le répertoire officiel des extensions WordPress.
Recherchez le slug de votre extension sur le répertoire !

Si la recherche affiche aucun résultat, c’est qu’il n’y pas de conflit. On peut donc continuer !

Attention

N’utilisez jamais le même slug qu’un extension déjà présente sur le répertoire officiel, au risque de faire écraser vos fichiers lors d’une mise à jour future.

Conseil

Une bonne solution pour éviter ça est de préfixer le nom de votre dossier avec le nom de votre agence. Pour moi, c’est capitaine-.

Lancer le compilateur

Une fois votre éditeur de code ouvert, la première chose à faire sera d’ouvrir le terminal intégré via le menu Terminal > Nouveau Terminal.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

Inscrivez ensuite à l’intérieur npm start et appuyez sur Entrée pour lancer le compilateur.

Le terminal dans VSCode affiche des informations sur la compilation des fichiers.
Le compilateur affiche des informations au fur et à mesure qu’il compile les fichiers

Si tout se passe bien, vous devriez voir apparaître plusieurs lignes en vert et orange.

Désormais tout sera fait automatiquement : le compilateur va convertir les fichiers React du dossier src en JS standard et les placera dans le dossier build à chaque fois qu’on fera une modification.

D’ailleurs, on ne touchera donc jamais aux fichiers du dossier build. On travaillera uniquement depuis le dossier src.

Conseil

Pensez bien à relancer le terminal à chaque fois que vous réouvrez votre éditeur de code.

Si plus tard vous avez besoin de lancer une autre ligne de commande en parallèle du compilateur, vous pouvez diviser le terminal en deux :

L'éditeur de code affichant 2 fenêtres de commandes distinctes.
Cliquez sur cette icône pour diviser votre terminal

Ce sera pratique pour installer une nouvelle dépendance à votre projet ou versionner votre code par exemple.

Tester le bloc

Pour terminer, on va vérifier que tout fonctionne bien, et pour cela on va insérer le bloc créé par défaut avec l’extension.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

Dans WordPress, créez une page ou un article et insérez le bloc dans le contenu, vous devriez avoir quelque chose qui ressemble à ceci :

Votre bloc devrait apparaître dans la catégorie widgets de l'éditeur Gutenberg.
Le bloc se trouve dans la catégorie widgets

Notez qu’en front, la bordure rouge en pointillé n’apparaît pas : c’est normal car ce style est présent uniquement dans editor.scss.

Comme on l’a vu, pour l’instant ce bloc ne fait rien. Dans la suite de la formation, on va créer des blocs administrable pour les rendre plus intéressant !

Ce bloc était juste là pour nous donner un aperçu rapide des actions nécessaires pour déclarer un bloc, et servira de base pour la suite.

Conseil

Pour créer d’autres blocs, dupliquez simplement ce bloc dans le dossier /src/, et indiquez un name différent dans le fichier block.json.

Télécharger les fichiers de la formation

Dans cette formation, je vais parcourir tous les concepts des blocs Gutenberg au travers d’une vingtaine d’exemples.

verrouillé Vidéo premium

Cette vidéo est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule

Dans la version premium de la formation, vous avez accès au code de mes projets afin d’éviter d’avoir à les réécrire vous-même.

verrouillé Partie premium

Cette partie du cours est réservée aux détenteurs de l’offre premium.
Envie de nous rejoindre ?

Choisir une formule


N’hésitez pas à utiliser cet outil pour tous vos sites qui nécessiteront des blocs sur mesure !

Maintenant, avant de se lancer dans la création de notre premier bloc, on va faire un tour du propriétaire et analyser la structure de cette extension, afin de bien comprendre le rôle de chaque fichier.

15

Questions, réponses et commentaires

  1. contact

    Le 12 avril 2018

    Hello Maxime,
    Merci pour cette formation.
    Pas moyen d’installer Local by Flywheel. Peut-on le remplacer par Wamp pour suivre ce tuto ?

    1. Maxime BJ

      Le 12 avril 2018

      Oui pas de souci ! Je te conseille même plutôt MAMP qui fonctionne mieux sur Windows que ses collègues (Wamp…) et reconnu pour poser moins de soucis.

      Qu’est-ce qui bloque pendant l’installation de Local ? Tu sais ?

      1. contact

        Le 14 avril 2018

        Difficile de savoir, ça bloque sur starting local machine… J’ai essayé en supprimant Oracle VM virtual box, comme conseillé sur les forums mais sans résultat. On est apparement un certain nombre à être bloquer surtout avec win 7.

  2. info3

    Le 17 décembre 2018

    Bravo Maxime, un super boulot, riche d’enseignements, de bonnes pratiques, vraiment didactique.

    1. Maxime BJ

      Le 21 décembre 2018

      Merci beaucoup ! 🙂

  3. Houwk

    Le 20 février 2019

    Un article parfait 😀

    Petite question lorsqu’on créé un bloc, tout le code est compilé dans gutenberg_blocks-cgb-block-js pas moyen de faire un appel js et css que lorsque le bloc est appelé ?

    1. Maxime BJ

      Le 20 février 2019

      Merci !
      Tout le code est effectivement compilé dedans oui, mais tu pourrais très bien appeler un autre script en parallèle via enqueue script. Mais ça dépend vraiment de ce que tu veux faire !

  4. guillaume.tirard

    Le 18 mars 2019

    Hello, merci beaucoup, oui c’est très clair pour l’instant.

    Toute l’installation est basée sur le fait de créer ses blocs dans des plugins, j’aurai besoin de les installer plutôt dans mon thème enfant. Mais je verrai bien plus tard comment adapter la configuration à ce besoin, cela ne m’empêche pas d’apprendre les fondamentaux en attendant.

    Merci.

    1. Maxime BJ

      Le 18 mars 2019

      En fait il vaut mieux les laisser dans une extension quand même comme je l’explique dans un cours précédent. C’est plus simple à gérer !

  5. Ogan

    Le 6 juin 2021

    Hello,

    Merci pour ce tuto qui permet de découvrir les coulisses de Gutenberg.

    Je pense avoir trouvé une mini coquille dans le texte au point 2. Lancer Webpack … Au prochain démarrage de votre ordinateur

    Le nom de dossier à la fin de la ligne de commande ( cd /Sites/gutenberg/app/public/wp-content/plugins/capitainewp ) devrait être « capitainewp-gut-bases », non ?

    1. Maxime BJ

      Le 7 juin 2021

      Merci ! Je corrige tout de suite 🙂

  6. Mary

    Le 12 avril 2023

    Bonjour, Tout d’abord, merci pour vos cours qui sont toujours aussi bien rédigés et compréhensibles et pour la qualité de la pédagogie ! J’avais une question bête… est-ce qu’il est pertinent de coupler la création de blocks Gutenberg et ACF ou un seul des deux suffit à personnaliser un site web ? Merci par avance pour votre réponse.

    1. Maxime BJ

      Le 13 avril 2023

      Merci !
      Tu peux choisir : soit faire des blocs avec ACF, ce qui est beaucoup plus simple et beaucoup plus rapide, avec seulement du PHP. Soit les faire nativement en React. Dans l’absolu il n’y a plus trop d’avantages à utiliser la méthode native en réalité. Donc je recommande l’utilisation d’ACF. Ce cours te montre comment faire : https://capitainewp.io/formations/acf/blocs-acf-gutenberg/

      1. Mary

        Le 13 avril 2023

        Bonjour Maxime, merci beaucoup pour ces précisions, d’après ce que je lis, si on souhaite faire appel à une API il vaut mieux privilégier la création de blocks natifs en REACT, si ce n’est pas le cas on peut utiliser ACF ? Merci d’avance pour la réponse.

        1. Maxime BJ

          Le 13 avril 2023

          Au final tu pourrais faire ça aussi avec des blocs ACF. Après ça dépend vraiment de comment tu vas appeler l’API et les besoins en performance. Les 2 solutions peuvent marcher en tous cas. si tu le fais en ACF, tu pourras appeler l’API distante à partir du template de rendu PHP. Si tu utilises React, tu pourrais aller directement sonder l’API à partir de JS.

Laisser un commentaire