Hugo, le générateur de site statique écrit en Go, a pris la communauté de vitesse. Il présente tous les avantages d’un générateur de site statique — 100% flexible, sécurisé et rapide — mais il vole également la vedette quand on compare ses performances avec celles de Jekyll. Le site de Forestry.io est d’ailleurs développé avec Hugo.
Nous allons voir comment configurer Hugo sur votre ordinateur, comment installer et personnaliser un thème, en ajoutant nos propres fichiers CSS et JavaScript.
Quelle différence avec le guide de démarrage rapide de la documentation d’Hugo ? Nous allons utiliser notre kit de démarrage régulièrement mis à jour qui ajoute un workflow de développement moderne à Hugo.
Sommaire
- Nous soutenir
- Contributeurs
- Charte graphique
- Administrateurs
- À propos de Jamstatic
- Actualités
- Références
- Exemples de code
- Qu'est-ce que vous faites quand vous ne travaillez pas sur Jekyll ?
- Peux-tu nous dire comment tu as été amené à t'impliquer dans Jekyll et ce qui s'est passé depuis pour aboutir à la mise en ligne de la version 3.0 de Jekyll ?
- Tu as débuté avec la 0.12.1 ?
- Quelle fut ta première expérience de programmation ?
- Quelle fut ta première rencontre avec les générateurs de site statique modernes ?
- C'était donc une question de masse critique ? Il y avait pas mal de gens, donc tu savais que c'était vivant et actif
- Que souhaites-tu aux générateurs de site statique ?
- Comment est-il possible de faire cela ?
- Le dynamique a l’air bien plus intéressant !
- Oui statique ça fait un peu péjoratif dans ce contexte
- En tant que mainteneur de Jekyll, qu'aimerais-tu dire, communiquer à ceux qui s'intéressent aux technologies autour du web statique moderne ? La tribune est à toi
- Prérequis
- Pages utilisateur et organisation
- Pages projet
- Les thèmes peuvent désormais fournir des assets statiques et dynamiques dans le dossier /assets
- Les filtres relative_url et absolute_url
- site.url est maintenant défini pour le serveur de développement
- Et bien plus encore
- Prérequis
- Préparer son thème
- Tester son thème
- Un guide complet pour coder et déployer un site, tout en ligne de commande
- C’est quoi Jekyll ?
- Développons un portfolio !
- Plongeons dans les fichiers
- Modifier les paramètres de votre site
- Ajoutons notre premier article !
- YAML front matter
- Liquid
- Écrire un article pour de vrai
- Un autre exemple d’article en .md
- Ajoutons un peu de CSS à tout ça
- Sass
- Versionnement avec Git
- Configurer Git
- Créer un dépôt sur GitHub
- GitHub Pages
- Mes conseils supplémentaires
- Système de grille
- Rythme vertical
- Fin
- Passer à la version 2 de Staticman
- Ajout du support des fils de commentaires
- Ajout du support des notifications par mail
- La transformation de Jekyll
- Le cœur de Jekyll
- Test exhaustif d’une génération
- Génération des fichiers sans l’option brouillons
- Génération des fichiers avec l’option brouillon
- Comment et pourquoi en êtes-vous arrivés à choisir un générateur de site statique comme clé de voûte de votre processus de publication aux éditions The Getty ? Pourquoi ne pas avoir opté pour un développement natif ?
- Comment votre équipe s'est appropriée ce nouveau workflow ? L'appropriation a-t-elle été facile ?
- Est-ce que tu penses qu'un process à base de technologies web peut remplacer le couple démoniaque Word et InDesign ? Particulièrement en ce qui concerne la facilité d’écriture et de structuration des contenus (WYSIWYG) ainsi que la mise en page (InDesign) ?
- Est-ce que ce nouveau process augmente la qualité des publications de The Getty ?
- Est-ce que ce nouveau workflow vous fait gagner du temps et de l’argent ? Y’a t-il une différence de prix de revient pour les livres, y compris pour les livres papier ?
- Quelles sont les contraintes auxquelles vous vous heurtez encore aujourd’hui ? Quel serait votre workflow idéal ?
- Est-ce que tu penses que d’autres maisons d’édition vont adopter à leur tour cette stratégie avec des générateurs de site statique (pas de WYSIWYG, un balisage léger, pas de base de données, des métadonnées YAML, versionnement avec Git, etc.) ? Est-ce qu'un courant pourrait se former autour de ce concept ?
- Les rudiments d’un générateur de site statique
- Allons au cœur du problème
- Les rudiments de Harp
- C’est pas si compliqué, non ?
- Mon rapport et mon livre
- Du YAML front matter, une boucle for et pas mal de modules
- Le workflow Git
- Utilisation de Netlify
- Configuration de Jekyll
- De quoi parle-t-on ?
- Prérequis
- Jamstack et développement statique
- 1. Référencement
- 2. Performance
- 3. Sécurité
- 4. Déploiement & Workflow
- 5. Une communauté en pleine expansion
- Est-ce que c'est fait pour moi ?
- Écouter l’épopée de Smashing Magazine
- Un travail titanesque
- Ainsi naquirent nos rêves d’open source
- Notre CMS open source
- Putain, on l’a fait !
- Configurer Netlify
- Authentification via GitHub
- Ajout des fichiers de l’admin
- Accéder à l’administration
- Et voilà !
- Choisir un générateur de site statique
- Configurer Hugo
- Se plonger dans Hugo : quelques détails techniques
- Héberger chez Netlify
- Résumé de ma configuration actuelle
- Objectifs futurs
- Quelques mots de conclusion ?
- Quels problèmes Gatsby essaie-t-il de résoudre ?
- Comment se positionne Gatsby par rapport aux autres générateurs de sites statiques, qu'ils soient basés sur React ou non ?
- Quelle longévité peut-on espérer pour Gatsby ?
- Que prévoyez-vous ensuite ?
- Hugo : un générateur de site statique super rapide
- Tutoriel Hugo : site, produits, modèles et déploiement
- Démo de site Hugo et dépôt GitHub
- Conclusion et ressources supplémentaires
- Introduction
- Fondamentaux des templates Hugo
- Prenons de la hauteur
- La fin et le début
- Comment fonctionnent les thèmes ?
- Comment utiliser un thème ?
- Quels thèmes puis-je utiliser ?
- Trucs et astuces pour créer un super thème
- Bien configurer son environnement
- C’est parti
- La structure de fichiers
- Développer votre thème
- Ajouter des contenus d’exemple
- Soumettre sa gem de thème
- Les thèmes distants sur GitHub Pages
- Tests et mises à jour
- Bonjour Bjørn Erik, comment t'es-tu retrouvé impliqué dans Hugo ?
- Les problèmes résolus par Hugo
- Comment fait Hugo pour aller si vite ?
- Quels sont les sites les plus visibles qui utilisent Hugo ?
- Comment se porte le projet actuellement ?
- Hugo est open source. Comment se passe la gestion du projet ?
- Qui vous soutient dans le développement ?
- Quelle est la prochaine étape pour Hugo ?
- Bonjour Bud, tu es un observateur et un défenseur de ce que beaucoup désignent encore comme de simples sites statiques. Comment les choses ont-elles évolué depuis quelques années ?
- En 2015 Tom Preston-Werner disait lors de la JekyllConf que 80% du Web pourrait être statique, est-ce le cas aujourd’hui ?
- Les administrations publiques aux États-Unis (avec 18F), au Royaume-Uni (avec Alphagov) ou en France (avec Etalab) semblent privilégier ce type de workflow. Pourquoi à ton avis est-ce si intéressant pour les administrations publiques et les organismes ouverts ?
- Nous voyons aussi de plus en plus d’agences, de start-ups adopter cette manière de travailler par défaut quand il s'agit de publier des contenus. Quels sont selon toi les projets les plus susceptibles de faire réfléchir à deux fois avant de dégaîner son bon vieux CMS ?
- Mais alors pourquoi les agences n'adoptent-elles pas ce processus de travail ?
- Si ce workflow est naturel pour les développeurs Web, les utilisateurs finaux préfèrent utiliser une interface graphique complète. Ces deux manières de travailler sont-elles compatibles ?
- Quel est ton workflow actuel ? Qu'est-ce qui te plaît tant dedans ?
- Comment vends-tu cette manière de travailler à tes clients ?
- Que souhaites-tu pour cette stack Web moderne à court terme ?
- Bonjour Michael, comment te présenter ?
- Comment en es-tu venu à adopter Jekyll comme outil de publication ?
- Sur quels types de sites travailles-tu ?
- Qu'est-ce qui te plait dans le fait de travailler avec des générateurs de site statique ?
- Quelle est ta fonctionnalité préférée dans Jekyll ?
- Quelle est la fonctionnalité qui te manque le plus ?
- Pourquoi y a-t-il aussi peu de thèmes de qualité pour Jekyll selon toi?
- Pourquoi n'y a-t-il pas plus de designers Web qui travaillent avec des générateurs de site statique ?
- Ton thème hpster a été porté pour Hugo, est-ce que tu as testé ?
- Avantages
- Prise de conscience
- Les fonctionnalités dynamiques
- Le panier d’achat
- En résumé
- Hugo
- Performance
- Les données
- Exemple d’architecture
- Déploiement
- Questions en suspend
- Pour aller plus loin
- Mais d’abord, comment démarrer simplement
- 1. Déploiements atomiques avec publication et retour en arrière immédiats
- 2. Notifications et permaliens
- 3. Branches de déploiement et sous-domaines
- 4. Tests A/B, Tests A/B avec plusieurs variantes ou tests séparés
- 5. Commandes de génération contextuelles
- 6. Gestion des certificats SSL et SSL gratuit avec Let’s Encrypt
- 7. Lancer des tests avec l’intégration continue de Netlify
- 8. Gestion des formulaires
- 9. Redirections, réécritures et proxy
- 10. Contrôle des entêtes personnalisés
- Ça en fait 10, mais ce n'est pas tout
- L'API WordPress
- Ajouter vos articles dans Metalsmith
- Étape suivante
- Le contexte et le point
- Le point de la page
- Les fichiers partiels
- Conclusion
- C'est quoi Scratch ?
- Manipuler des tableaux et des maps
- Attention au périmètre et au contexte…
- .Scratch après Go 1.11
- Flexibilité
- Pariez sur JavaScript
- Eleventy n'est pas un framework JavaScript
- Testez Eleventy !
- 1. Configurer Hugo
- 2. Configurer votre site
- 3. Personnaliser votre site
- 4. Personnaliser votre thème
- 5. Prochaine étape
1. Configurer Hugo
Pou commencer, clonez ou téléchargez notre kit de démarrage pour Hugo, et décompressez l’archive quelque part sur votre ordinateur. Vous avez aussi besoin de Node.js et d’NPM, il vous suffit de suivre les indications sur la page de téléchargement de Node si vous ne les avez pas déjà installés.
Vous bénéficiez ainsi automatiquement d’une structure de départ pour Hugo. Dans
notre kit, elle est stockée dans le dossier hugo. À l’intérieur se trouvent
divers dossiers qui abritent le contenu de votre site, les gabarits de page et
les fichiers CSS, JS, images, etc. L'arborescence de la structure de base
ressemble à ceci — j'ai laissé quelques fichiers et dossiers de côté de façon à
ce que ce soit plus clair :
.
├── hugo/ // Le site Hugo, avec les fichiers de contenu, de données, statiques.
| ├── .forestry/ // rassemble les fichiers de configuration pour Forestry.io
| ├── content/ // Tout le contenu du site est stocké ici
| ├── data/ // Les fichiers de données du site au format TOML, YAML ou JSON
| ├── layouts/ // Vos modèles de page
| | ├── partials/ // Les fichiers partiels réutilisables de votre site
| | ├── shortcodes/ // Les fichiers shortcodes de votre site
| ├── static/ // Les fichiers statiques de votre site
| | ├── css/ // Les fichiers CSS compilés
| | ├── img/ // Les images du site.
| | ├── js/ // Les fichiers JS compilés
| | └── svg/ // Les fichiers SVG vont ici
| └── config.toml // Le fichier de configuration d’Hugo
└─── src/
├── css // Les fichiers source CSS/SCSS à compiler vers /css/
└── js // Les fichiers source JS à compiler vers /js/
Pour démarrer le projet, ouvrez une fenêtre de terminal et positionnez-vous dans
le dossier qui contient la structure de départ (hugo-boilerplate par défaut) :
cd chemin/vers/hugo-boilerplate/
Installez ensuite toutes les dépendances du projet en lançant :
npm install
Pour lancer le serveur de développement et ouvrir le site dans votre navigateur, lancez simplement :
npm start
2. Configurer votre site
Nous allons commencer par ajouter de nouveaux contenus au site. Pour ce faire,
nous allons devoir mettre à jour le contenu présent dans le dossier
hugo/content.
Mettre à jour un article
Commencer par mettre à jour l’exemple d’article fourni dans notre structure de
départ. Ouvrez le fichier hugo/content/posts/example.md dans votre éditeur de
texte. Il est composé d’un en-tête front matter avec un champ titre et d’un
texte d’exemple au format markdown.
---
title: "Bienvenue dans Hugo !"
---
Vous trouverez la source de cet article dans le répertoire `content/posts`.
Pour ajouter un nouvel article, placez un nouveau fichier dans le dossier
`content/posts` en respectant la nomenclature `titre-de-l-article.md` et
ajoutez les métadonnées nécessaires dans l’en-tête de page Front Matter.
Jetez un œil au fichier source de cet article pour voir comment ça marche.
<!--more-->
Hugo also offers powerful support for code snippets:
```go
package main
import "fmt"
func print_hi(name string) {
fmt.Println("Hi, ", name)
}
func main() {
print_hi("Tom")
}
//=> prints 'Hi, Tom' to STDOUT.
```
Check out the [Hugo docs][hugo-docs] for more info on how to get the most
out of Hugo. File all bugs/feature requests at [Hugo’s GitHub
repo][hugo-gh]. If you have questions, you can ask them on [Hugo
Community][hugo-community].
[hugo-docs]: https://gohugo.io/documentation/
[hugo-gh]: https://github.com/gohugoio/hugo
[hugo-community]: https://discourse.gohugo.io/
Cet article n'a pas de date ! Essayez d’en définir une en ajoutant l’entrée suivante dans l’en-tête Front Matter de l’article:
date: "YYYY-MM-DDTHH:MM:SS-00:00"
Sauvegardez vos changements puis affichez l’article mis à jour dans votre navigateur à l’adresse http://localhost:3000/. La date affichée devant le titre de l’article devrait avoir été mise à jour.
Créer un nouvel article
Maintenant essayons de créer un nouvel article. Nous utiliserons pour cela la commande fournie avec Hugo pour générer un nouvel article. Dans notre projet, Hugo est déclaré comme une dépendance NPM, nous pouvons donc l’utiliser avec la commande :
npm run hugo -- <command> --<param>
Créez votre premier article en lançant :
npm run hugo -- new posts/mon-premier-article.md
Cela va créer un nouvel article au format markdown dans
hugo/content/posts/mon-premier-article.md. Ouvrez ce fichier dans votre
éditeur de texte favori.
---
title: "Mon Premier Article"
date: "2018-03-09T14:24:17-04:00"
draft: true
---
Ce fichier comporte un en-tête Front Matter (des métadonnées structurées relatives à la page) dont on peut tirer parti dans les gabarits de page. Sous le front matter, nous pouvons ajouter du contenu au format markdown :
Ajoutez par exemple le contenu suivant dans le fichier et sauvegardez vos changements :
## Bienvenue
Pratique ce modèle de projet _Hugo_. j'espère que vous appréciez ce guide !
Vous pouvez voir l’article mis à jour dans votre navigateur à l’adresse http://localhost:3000/posts/mon-premier-article/.
Utiliser un thème
Pour le moment votre nouveau site n'est pas très beau. Remédions à cela en ajoutant un thème issu de la galerie de thèmes de Hugo, développé par un des meilleurs contributeurs de la communauté.
Nous allons utiliser le thème
Casper de
@vjeantet. Pour ce faire nous allons ajouter le
thème dans le dossier hugo/themes, plus exactement dans le dossier
hugo/themes/hugo-theme-casper/.
Clonez ou
téléchargez le thème
et décompressez l’archive dans hugo/themes/hugo-theme-casper/.
Ensuite, mettez à jour la configuration du site aves les options de configuration spécifiques au thème.
Ouvrez le fichier hugo/config.toml dans votre éditeur de texte favori et
remplacer son contenu par celui-ci :
baseURL= "/"
languageCode= "fr"
title= "Hugo Boilerplate"
paginate = 5
copyright = "Tous droits réservés - 2018"
theme = "hugo-theme-casper"
disableKinds = ["taxonomy", "taxonomyTerm"]
[params]
description = "Bien démarrrer avec Hugo"
metadescription = "Utilisé dans la balise meta 'description' pour l’accueil et les pages d’index, faute de quoi c'est l’entrée 'description' du front matter de la page qui sera utilisé."
cover = ""
author = "VOTRE_NOM"
authorlocation = "Terre, Galaxie de la Voie Lactée"
authorwebsite = ""
authorbio= ""
logo = ""
hjsStyle = "default"
paginatedsections = ["posts"]
Reportez-vous à la documentation du thème pour prendre connaissance de toutes les options de configuration disponibles.
Pour finir, supprimez les exemples de gabarits de page fournis avec notre modèle de départ. Pour cela lancez la commande :
rm -r hugo/layouts/
Regardez maintenant dans votre navigateur et vérifiez que votre site a bien été mis à jour !
3. Personnaliser votre site
Maintenant que nous avons mis en place un site fonctionnel avec un thème, vous avez probablement envie de le personnaliser.
Nous allons commencer par éditer les paramètres du site dans le fichier
hugo/config.toml. Mettez à jour les valeurs suivantes comme bon vous semble :
title = "Hugo Boilerplate"description = "Bien démarrer avec Hugometadescription = "Utilisé dans la balise meta 'description' pour l’accueil et les pages d’index, faute de quoi c'est l’entrée 'description' du front matter de la page qui sera utilisé"author = "VOTRE_NOM"
Bien, ajoutons maintenant une image de fond pour la bannière d’en-tête. Dans le
fichier hugo/config.toml, vous trouverez une section [params]. Modifiez le
paramètre cover pour qu'il ait la valeur /img/darius-soodmand-116253.jpg,
sauvegardez vos changements.
Retournons maintenant voir notre site dans le navigateur. C’est déjà mieux, mais il y a encore du travail.
4. Personnaliser votre thème
Maintenant que vous avez adapté le site pour le personnaliser en peu, nous allons nous attarder sur l’aspect le plus puissant d’Hugo et de ce kit de démarrage: un templating simple et puissant.
Nous venons d’ajouter le thème Casper au site, ce qui permet à Hugo d’utiliser
tous les gabarits HTML présents dans le dossier
hugo/themes/hugo-theme-casper/layouts/ lors de la génération du site.
Nous allons maintenant étendre le thème grâce à l’héritage de gabarits d’Hugo.
Tous les fichiers de gabarits présents dans le dossier hugo/layouts/
surchargeront n'importe quel gabarit du même nom présent dans le répertoire des
gabarits du thème, nous permettant ainsi de personnaliser notre site sans
toucher au thème d’origine.
CSS & Javascript personnalisé
À côté d’Hugo, ce kit de démarrage fourni un serveur de développement qui va
post-traiter automatiquement les fichiers CSS et JS pour le navigateur. Tous les
fichiers CSS, JS, images présents dans le dossier src/ seront traités
automatiquement et déplacés dans le dossier hugo/static/.
Ajoutons-les à notre thème de manière à pouvoir le personnaliser comme nous voulons. Nous allons copier des fichiers de gabarits du thème et ajouter les fichiers CSS et JS personnalisés de notre kit dans ces gabarits.
Premièrement, nous allons copier le fichier partiel header.html du thème dans
le dossier hugo/layouts/partials/ :
mkdir -p hugo/layouts/partials/
cp hugo/themes/hugo-theme-casper/layouts/partials/header.html hugo/layouts/partials/header.html
Ouvrez le fichier hugo/layouts/partials/header.html dans votre éditeur de
texte et repérez les lignes suivantes :
<link rel="stylesheet" type="text/css" href="{{ "css/screen.css" | relURL}}" />
<link rel="stylesheet" type="text/css" href="{{ "css/nav.css" | relURL}}" />
Ajoutez en dessous la ligne suivante :
<link rel="stylesheet" type="text/css" href="{{ "css/styles.min.css" | relURL}}"
/>
Ensuite, recopions le fichier partiel footer.html dans le dossier
hugo/layouts/partials/ de manière à pouvoir ajouter notre fichier JS
personnalisé :
cp hugo/themes/hugo-theme-casper/layouts/partials/footer.html hugo/layouts/partials/footer.html
Ouvrez maintenant le fichier hugo/layouts/partials/footer.html et repérez les
lignes suivantes :
<script type="text/javascript" src="{{"js/jquery.js" | relURL}}"></script>
<script type="text/javascript" src="{{"js/jquery.fitvids.js" | relURL}}"></script>
<script type="text/javascript" src="{{"js/index.js" | relURL}}"></script>
Ajoutez juste en dessous:
<script type="text/javascript" src="{{"js/scripts.min.js" | relURL}}"></script>
Maintenant tout notre code CSS et JS personnalisé sera utilisé sur le site.
Faisons un essai en augmentant la hauteur de l’en-tête principal. Ouvrez le
fichier src/css/styles.css et ajoutez le code suivant à la fin du fichier :
.tag-head.main-header {
height: 80vh;
}
Admirez le résultat final dans votre navigateur !
5. Prochaine étape
Vous êtes maintenant prêt·e à commencer à créer un site statique avec Hugo !
Vous pouvez continuer à utiliser le thème Casper ou repartir du début en
utilisant les modèles du répertoire hugo/layouts/.
Pour en apprendre un peu plus sur Hugo, reportez-vous aux sections suivantes de la documentation officielle :
- L'organisation des contenus dans Hugo
- Introduction au langage de templating d’Hugo
- Les options de configuration d’Hugo
Nous verrons dans un prochain article comment configurer le versionnement avec Git pour faciliter l’intégration continue et le déploiement chez différents hébergeurs avec Forestry, un CMS pour les sites statiques générés avec Hugo ou Jekyll.