Onze (ou 11ty) est un générateur de site statique (SSG) Node.js. Les SSG effectuent la plupart des travaux de rendu au moment de la construction pour créer un ensemble de fichiers HTML, CSS et JavaScript statiques. Les pages résultantes n’ont pas besoin d’avoir des dépendances côté serveur telles que des environnements d’exécution ou des bases de données.
Cela conduit à plusieurs avantages clés:
l’hébergement est simple: vous diffusez des fichiers HTML
les systèmes sont sécurisés: il n’y a rien à pirater
les performances peuvent être excellentes.
Eleventy est devenu de plus en plus populaire et a attiré l’attention de grands noms du développement Web. Il est idéal pour les sites de contenu et les blogs, mais il a été adapté pour les boutiques en ligne et les systèmes de rapports.
Dans la plupart des cas, vous utiliserez Eleventy pour générer des pages HTML à partir de documents Markdown qui insèrent du contenu dans des modèles alimentés par des moteurs tels que Nunchucks. Cependant, ce didacticiel montre également comment utiliser Eleventy comme système de construction complet pour tous les actifs. Vous n’avez pas nécessairement besoin d’un système distinct tel que les scripts npm, le webpack ou Gulp.js, mais vous pouvez toujours profiter des compilations automatisées et du rechargement en direct.
Avez-vous besoin d’un framework JavaScript?
Quelques SSG adoptent des frameworks JavaScript côté client tels que React ou Vue.js. Tu pouvez utilisez un framework avec Eleventy, mais il n’est pas appliqué.
À mon avis, un framework JavaScript est probablement inutile, sauf si vous créez une application complexe. Et si vous créez une application, un SSG n’est pas le bon outil! Gatsby les fans peuvent ne pas être d’accord, alors s’il vous plaît défie-moi / ridicule sur Twitter!
Montre-moi le code
Eleventy prétend être simple, mais cela peut être intimidant lorsqu’on dépasse les bases. Ce tutoriel montre comment créer un site simple avec des pages et des articles de blog / article – une tâche souvent gérée par WordPress.
Le code complet est disponible sur https://github.com/craigbuckler/11ty-starter. Vous pouvez le télécharger, l’installer et le lancer sous Windows, macOS ou Linux en entrant les commandes suivantes dans votre terminal:
git clone https://github.com/craigbuckler/11ty-starter
cd 11ty-starter
npm i
npx eleventy --serve
Les étapes ci-dessous décrivent comment créer le site à partir de zéro.
Installez Eleventy
Comme tout projet Node.js, commencez par créer un répertoire et initialiser un package.json fichier:
mkdir mysite
cd mysite
npm init
Ensuite, installez Eleventy en tant que dépendance de développement:
npm i @11ty/eleventy --save-dev
Remarque: ce projet installe des modules en tant que dépendances de développement car ils ne doivent être exécutés que sur une machine de développement. Certains hôtes dotés de processus de construction automatisés peuvent nécessiter l’utilisation de dépendances d’exécution standard.
Rendre votre première page
Créer un src répertoire dans lequel tous les fichiers source résideront, puis créez un index.md fichier à l’intérieur. Ajoutez du contenu de page d’accueil tel que:
‐‐‐
title: 11ty starter site
‐‐‐
This is a demonstration website using the [11ty static site generator](https://www.11ty.dev/). It shows pages, blog posts, lists, and tags.
The whole build process is managed through 11ty.
Contenu entre le ‐‐‐ les marqueurs de tiret sont connus comme matière première. Il définit les métadonnées nom-valeur de la page qui peuvent être utilisées pour définir les paramètres d’Eleventy et des modèles. Seulement un title est défini ici, mais vous allez bientôt ajouter des descriptions, des dates, des balises et d’autres données.
Un fichier de configuration Eleventy nommé .eleventy.js doit être créé dans le dossier racine de votre projet. Cet exemple de code simple renvoie un objet, qui spécifie ce qui suit:
la source src répertoire des fichiers source
les build répertoire dans lequel les fichiers du site Web seront créés
Dans ce cas, un seul build/index.html le fichier est créé est accessible en chargeant l’URL http: // localhost: 8080 dans votre navigateur.
Le fichier HTML créé à build/index.html contient le contenu rendu à partir du fichier de démarque à src/index.md:
<p>This is a demonstration website using the <ahref="https://www.11ty.dev/">11ty static site generatora>. It shows pages, blog posts, lists, and tags.p><p>The whole build process is managed through 11ty.p>
Le serveur Eleventy peut être arrêté avec Ctrl | Cmd + C.
Remarque: il est rarement nécessaire d’arrêter Eleventy pendant le développement du site, car les nouveaux fichiers sont automatiquement rendus. Cependant, les sections ci-dessous ajoutent d’autres options de configuration, donc un redémarrage est nécessaire.
Création de modèles
Eleventy peut utiliser presque tous les moteurs de création de modèles JavaScript. Nunchucks est une bonne option car elle est complète et utilisée tout au long de documentation sur 11ty.dev.
Changer le sujet principal dans src/index.md pour ça:
‐‐‐
title: 11ty starter site
description: This is a demonstration website generated using the 11ty static site generator.
layout: page.njk
‐‐‐
Cela demande à Eleventy d’utiliser le page.njk Modèle Nunchucks pour la mise en page. Par défaut, Eleventy recherche des modèles dans un _includes sous-répertoire dans le répertoire source (src/). Tous les fichiers qui s’y trouvent ne sont pas rendus eux-mêmes mais sont utilisés pendant le processus de construction.
Créez ce nouveau modèle sur src/_includes/page.njk:
{% include "partials/htmlhead.njk" %}
<main>
{% block content %}
<h1>{{ title }}h1>
{{ content | safe }}
{% endblock %}
main>
{% include "partials/htmlfoot.njk" %}
Le modèle place le title défini dans l’introduction de la page dans un
titre et remplace {{ content }} avec HTML généré à partir du Markdown. (Il utilise le safe Filtre Nunchucks pour afficher du HTML sans les guillemets ni les crochets.)
Les deux {% include %} les fichiers de référence des définitions inclus dans le modèle. Créez un fichier d’en-tête HTML à src/_includes/partials/htmlhead.njk, qui utilise également la page title et description:
<htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>{{ title }}title><metaname="description"content="{{ description }}">head><body>
Créez ensuite le pied de page HTML à src/_includes/partials/htmlfoot.njk:
body>html>
Arrêtez et redémarrez Eleventy avec npx eleventy --serve.
Le rendu buildindex.html Le fichier contient maintenant une page HTML entièrement formée:
<htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>11ty starter sitetitle><metaname="description"content="This is a demonstration website generated using the 11ty static site generator.">head><body><h1>11ty starter siteh1><p>This is a demonstration website using the <ahref="https://www.11ty.dev/">11ty static site generatora>. It shows pages, blog posts, lists, and tags.p><p>The whole build process is managed through 11ty.p>body>html>
Remarque: lorsque vous affichez la source dans un navigateur, vous verrez également un a été ajouté par BrowserSync après le élément. Ceci est utilisé pour déclencher des rechargements en direct et ne sera pas présent dans la version finale (voir la section «Créer un site de production» ci-dessous).
Créer d'autres pages
Vous pouvez maintenant créer du contenu supplémentaire, comme une section obligatoire «À propos de nous».
src/about/index.md:
‐‐‐
title: About us
description: What we do.
‐‐‐
Some information about us.
src/about/team.md:
‐‐‐
title: Our team
description: Information about us.
‐‐‐
Who are we and what we do.
src/about/privacy.md:
‐‐‐
title: Privacy policy
description: We keep your details private.
‐‐‐
Our privacy policy.
Aucun de ces fichiers ne fait référence à un modèle dans leur présentation. Eleventy vous permet de définir les valeurs par défaut pour tous les fichiers d'un répertoire en créant un .json file. Dans ce cas, il est nommé src/about/about.json. Il définit les valeurs JSON à utiliser lorsqu'elles ne sont pas explicitement définies dans la page d'accueil de la page:
{"layout"https://www.sitepoint.com/:"page.njk"}
Rediffusion npx eleventy --serve et examinez le build dossier pour voir comment le site commence à prendre forme:
index.html: la page d'accueil
about/index.html: page à propos de nous
about/team/index.html: page d'équipe
about/privacy/index.html: page de politique de confidentialité
Vous pouvez donc utiliser une URL de type slug dans votre navigateur. Par exemple, http: // localhost: 8080 / about / team / affiche la page de l'équipe index.html fichier.
Malheureusement, il est impossible de naviguer entre les pages! Vous avez besoin d'un menu…
Eleventy fournit une norme plugin de navigation, qui est installé en entrant ce qui suit:
npm i @11ty/eleventy-navigation --save-dev
Les plugins doivent être référencés dans votre .eleventy.js fichier de configuration avant la finale return déclaration:
eleventyNavigation: les sections préliminaires doivent être définies dans chaque page souhaitée dans le menu. La section définit les éléments suivants:
UNE key pour le menu de la page. Cela pourrait être identique au title mais est souvent plus courte.
Un optionnel parent, qui fait référence à la page parente key.
Un optionnel order nombre; les valeurs inférieures apparaissent en premier dans le menu.
La page d'accueil de la page d'accueil src/index.md peut être mis à jour en conséquence:
‐‐‐
title: 11ty starter site
description: This is a demonstration website generated using the 11ty static site generator.
layout: page.njk
eleventyNavigation:
key: home
order: 100
‐‐‐
La page à propos de src/about/index.md:
‐‐‐
title: About us
description: What we do.
eleventyNavigation:
key: about
order: 200
‐‐‐
La page de l'équipe sur src/about/team.md:
‐‐‐
title: Our team
description: Information about us.
eleventyNavigation:
key: team
parent: about
order: 210
‐‐‐
La page de politique de confidentialité sur src/about/privacy.md:
‐‐‐
title: Privacy policy
description: We keep your details private.
eleventyNavigation:
key: privacy
parent: about
order: 220
‐‐‐
Remarque: en utilisant order les valeurs par multiples de 10 ou plus permettent d'insérer des pages entre d'autres ultérieurement sans aucune renumérotation manuelle.
Un menu de navigation peut maintenant être ajouté au modèle de page à l'adresse src/_includes/page.njk:
Ceci est un code de plugin magique Eleventy qui examine toutes les pages et les filtre avec un eleventyNavigation() fonction pour créer une liste hiérarchique. Ce rendu de liste est rendu au format HTML à l'aide d'un eleventyNavigationToHtml() fonction.
Redémarrer npx eleventy --serve chargez n'importe quelle page pour afficher le menu.
Vous pouvez désormais accéder à n'importe quelle page définie dans eleventyNavigation première question.
Améliorez la navigation
Le plugin de navigation renvoie une liste HTML de base:
Ce sera suffisant pour la plupart des sites, mais vous pouvez l'améliorer. Par exemple:
fournir une option pour afficher le menu à un niveau spécifique - tel que le niveau supérieur uniquement dans l'en-tête et toutes les pages du pied de page
mettre en évidence la page active tout en la rendant non cliquable
définir des classes de style pour les éléments de menu actifs et ouverts.
Une façon d'y parvenir est de créer un petit code, qui sera familier à quiconque a utilisé WordPress. Un shortcode et tous les arguments facultatifs exécutent une fonction qui renvoie une chaîne HTML placée dans le modèle.
Arrêtez votre serveur Eleventy et mettez à jour le src/_includes/page.njk modèle pour utiliser un {% navlist %} shortcode dans le
Chaque page filtrée à travers le eleventyNavigation() , qui renvoie une liste hiérarchique d'objets de page. Chaque page définit un children tableau de sous-pages.
Le courant page.
Un optionnel level. Une valeur de 1 renvoie le HTML pour le niveau supérieur uniquement. 2 renvoie le niveau supérieur et toutes les pages enfants immédiates.
le navlist le shortcode doit être enregistré à l'aide d'un .addShortcode() fonction dans .eleventy.js avant le return déclaration. Il a passé un nom de code court et la fonction à appeler:
Vous pouvez maintenant exporter une fonction dans lib/shortcodes/navlist.js. Le code ci-dessous examine de manière récursive toutes les pages pour générer le code HTML approprié (ne vous inquiétez pas si cela est difficile à suivre).
Remarque: le fichier de shortcode a été créé en dehors du src dossier car il ne fait pas partie du site, mais vous pouvez également le définir dans src/_includes.