L'article précédent a discuté des raisons de l'utilisation d'un générateur de sites Web statique. En bref, les générateurs de sites Web statiques construisent des fichiers de page qui ne contiennent que du HTML à partir de modèles et de données brutes (généralement incluses dans les fichiers de marque). Il offre certains avantages CMS sans les frais généraux de l'hébergement, des performances et de la sécurité.
Les sites Web statiques peuvent convenir à une variété de projets, notamment:
Essentiellement, un générateur de sites Web statique est un outil de construction. Vous pouvez l'utiliser pour exécuter des tâches ou projeter un échafaudage comme vous le feriez avec Grunt ou Gulp.
Le champion du site Web statique incontesté est Jekyll - un projet Ruby lancé en 2008. Vous n'avez pas nécessairement besoin d'expertise Ruby pour utiliser Jekyll, mais cela vous aidera. Heureusement, les langues les plus populaires ont une grande variété de générateurs de sites Web statiques open source. Les options JavaScript incluent Hexo, Harp et Assemble. Pour des projets plus simples, vous pouvez également utiliser des outils de construction comme Gulp.
J'ai choisi Metalsmith pour ce tutoriel car il:
Ce tutoriel a construit un site Web de démonstration. Il ne gagnera aucun prix de conception, mais il illustre le concept de base. Le code de construction MetalSmith peut être vérifié et installé à partir du référentiel GitHub. Alternativement, vous pouvez suivre les instructions ici et créer votre propre site de base.
J'ai utilisé Metalsmith à plusieurs reprises - ne pense pas que ce soit le moyen ultime de créer chaque site Web statique!
Assurez-vous que Node.js est installé (par exemple à l'aide de NVM), puis créez un nouveau répertoire de projet, tel que Project et Initialisez votre fichier package.json:
<code>cd project && cd project npm init -y </code>
Installez Metalsmith maintenant et les différents plugins que nous utiliserons pour construire le site. Ce sont:
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
Nous utiliserons la structure suivante comme répertoire Source (SRC) et build (build) dans notre projet.
Vous pouvez créer des exemples de fichiers comme suit, ou les copier directement à partir du répertoire SRC de démonstration.
Le fichier de marque de page est inclus dans SRC / HTML. Cela peut contenir un sous-répertoire de premier niveau pour chaque section de site Web, c'est-à-dire
Chaque répertoire contient un fichier index.md, qui est la page par défaut de cette section. D'autres pages peuvent utiliser n'importe quel nom unique.
Le processus de construction convertit ces fichiers en permaliens basés sur les répertoires, tels que
Chaque fichier de marque fournit du contenu et des méta-informations, appelée "préface" est située en haut - marques, par ex.
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
Bien que d'autres options soient prises en charge, le système de modèle de guidon est utilisé. Un modèle typique nécessite une balise {{{contenu}}} pour contenir le contenu de la page et toutes les valeurs de préface, telles que {{title}}:
<code>cd project && cd project npm init -y </code>
Les références à {{& gt; Meta}, {{& gt;
partie
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
Assets statiques
Plugin personnalisé
Build Directory
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
Plugin Metalsmith
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
<code>{{> partialname }}</code>
faire une meilleure construction
Si la variable d'environnement Node_env est définie sur la production (exportation node_env = production sur mac / linux ou node_env = production sur Windows), la variable DevBuild sera définie sur true:
<code>cd project && cd project npm init -y </code>
Le répertoire domestique est défini dans l'objet DIR afin que nous puissions les réutiliser:
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
Chargez des modules Metalsmith et Plug-In. Remarque:
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
L'objet SiteMeta est défini à l'aide d'informations appliquées à chaque page. Les valeurs importantes sont le domaine et le Pathe Root, qui sont définis en fonction du développement ou de la construction de production:
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
définit également un objet TemplateConfig pour définir les valeurs par défaut du modèle. Ceci sera utilisé par les plugins Metalsmith-in-Place et Metalsmith-Layouts, qui permettent le rendu en page et au modèle à l'aide du guidon:
<code>{{> partialname }}</code>
Metalsmith est désormais initialisé comme auparavant, mais nous passons également l'objet Sitemeta à la méthode des métadonnées pour nous assurer que ces informations sont disponibles pour chaque page. Nous pouvons donc nous référer à des éléments comme {{nom}} dans n'importe quelle page pour obtenir le nom du site.
<code>// basic build 'use strict'; var metalsmith = require('metalsmith'), markdown = require('metalsmith-markdown'), ms = metalsmith(__dirname) // the working directory .clean(true) // clean the build directory .source('src/html/') // the page source directory .destination('build/') // the destination directory .use(markdown()) // convert markdown to HTML .build(function(err) { // build the site if (err) throw err; // and throw errors }); </code>
Notre premier plugin Appel Metalsmith-Publish, qui supprime tout fichier dont la valeur de publication de préface est définie sur la date, privée ou future:
<code>function debug(logToConsole) { return function(files, metalsmith, done) { if (logToConsole) { console.log('\nMETADATA:'); console.log(metalsmith.metadata()); for (var f in files) { console.log('\nFILE:'); console.log(files[f]); } } done(); }; }; </code>
SetDate est un plugin personnalisé inclus dans lib / metalsmith-setdate.js. Il garantit que chaque fichier a un ensemble de valeur "Date", et même si aucune valeur n'est définie dans la question précédente, elle peut être réalisée en retombant autant que possible à la date de version ou à la création de fichiers:
<code>ms = metalsmith(__dirname) // the working directory .clean(true) // clean the build directory .source('src/html/') // the page source directory .destination('build/') // the destination directory .use(markdown()) // convert Markdown to HTML .use(debug(true)) // *** NEW *** output debug information .build(function(err) { // build the site if (err) throw err; // and throw errors }); </code>
Metalsmith-Collections est l'un des plugins les plus importants car il attribue chaque page à une catégorie ou à une taxonomie en fonction de son emplacement ou d'autres facteurs dans le répertoire source. Il peut réorganiser les fichiers à l'aide de préfaces telles que les dates ou les priorités et vous permet de définir des métadonnées personnalisées pour la collection. Définition du code:
<code>devBuild = ((process.env.NODE_ENV || '').trim().toLowerCase() !== 'production') </code>
Le suivant est la conversion Markdown to HTML, suivi du plugin Metalsmith-Permalinks, qui définit la structure du répertoire pour la construction. Veuillez noter que MoreMeta définit: Maincollection pour chaque fichier ci-dessous:
<code>dir = { base: __dirname + '/', lib: __dirname + '/lib/', source: './src/', dest: './build/' } </code>
Metalsmith-Word-Count calcule le nombre de mots dans un article et calcule combien de temps il faut pour le lire. Paramètre {brut: true} Sortie uniquement Nombres:
<code>metalsmith = require('metalsmith'), markdown = require('metalsmith-markdown'), publish = require('metalsmith-publish'), wordcount = require("metalsmith-word-count"), collections = require('metalsmith-collections'), permalinks = require('metalsmith-permalinks'), inplace = require('metalsmith-in-place'), layouts = require('metalsmith-layouts'), sitemap = require('metalsmith-mapsite'), rssfeed = require('metalsmith-feed'), assets = require('metalsmith-assets'), htmlmin = devBuild ? null : require('metalsmith-html-minifier'), browsersync = devBuild ? require('metalsmith-browser-sync') : null, // custom plugins setdate = require(dir.lib + 'metalsmith-setdate'), moremeta = require(dir.lib + 'metalsmith-moremeta'), debug = consoleLog ? require(dir.lib + 'metalsmith-debug') : null, </code>
MoreMeta est un autre plugin personnalisé inclus dans Lib / Metalsmith-Moremeta.js. Il attache d'autres métadonnées à chaque fichier:
<code>cd project && cd project npm init -y </code>
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
<code>{{> partialname }}</code>
<code>// basic build 'use strict'; var metalsmith = require('metalsmith'), markdown = require('metalsmith-markdown'), ms = metalsmith(__dirname) // the working directory .clean(true) // clean the build directory .source('src/html/') // the page source directory .destination('build/') // the destination directory .use(markdown()) // convert markdown to HTML .build(function(err) { // build the site if (err) throw err; // and throw errors }); </code>
<code>function debug(logToConsole) { return function(files, metalsmith, done) { if (logToConsole) { console.log('\nMETADATA:'); console.log(metalsmith.metadata()); for (var f in files) { console.log('\nFILE:'); console.log(files[f]); } } done(); }; }; </code>
à quoi faire attention
plug-ins incompatibles
L'ordre du plugin est crucial
Browsersync Rebuild Issue
Les personnes utilisant des gestionnaires de tâches telles que Gulp remarqueront que Metalsmith fournit un processus de construction familier. Il existe des plug-ins pour le prétraitement CSS, la compression d'image, la connexion de fichiers, la diffusion et plus encore avec SASS. Pour un processus plus simple, cela pourrait être suffisant.
Cependant, Gulp a une gamme plus large de plugins et permet des activités de construction complexes telles que le peluche, le déploiement et le traitement PostCSS à l'aide de préfixer automatique. Il y a des plugins d'intégration Gulp / Metalsmith, bien que j'ai des problèmes et qu'ils ne devraient pas être nécessaires car les tâches Gulp peuvent exécuter Metalsmith directement, par exemple
<code>cd project && cd project npm init -y </code>
Ce processus empêche le problème de reconstruction de BrowSersync mentionné ci-dessus. N'oubliez pas d'utiliser .Clean (false) pour vous assurer que Metalsmith n'efface jamais le dossier de construction lorsque d'autres tâches sont actives.
Metalsmith est idéal si vous avez des besoins de site Web simples ou hautement personnalisés. Essayez peut-être d'utiliser un projet de document et ajoutez une fonctionnalité à la fois. Metalsmith n'est pas aussi entièrement fonctionnel que des alternatives comme Jekyll, mais elle n'est pas conçue pour en être ainsi. Vous devrez peut-être rédiger votre propre plugin, mais il est facile de le faire, ce qui est un énorme avantage pour les développeurs JavaScript.
La création d'un système de construction MetalSmith prend du temps, et nous n'avons pas considéré la quantité de travail impliquée dans les modèles HTML et le déploiement. Cependant, une fois que vous avez un processus disponible, l'ajout, l'édition et la suppression des fichiers de démarrage deviennent très simples. Cela peut être plus facile que d'utiliser CMS, et vous avez tous les avantages d'un site Web statique.
Metalsmith est un générateur de site Web statique simple et facile à utiliser. Il est basé sur Node.js et utilise une structure modulaire qui vous permet d'ajouter des fonctionnalités au besoin via des plugins. Cela le rend incroyable de flexibilité et de personnalisation. Vous devez utiliser Metalsmith pour créer un site Web statique car il vous permet de créer votre site Web exactement comme vous le souhaitez sans être limité par les CM traditionnelles. De plus, les sites Web statiques sont plus rapides, plus sûrs et plus faciles à maintenir que les sites Web dynamiques.
Pour installer Metalsmith, vous devez installer Node.js et NPM sur votre ordinateur. Après les installer, vous pouvez installer Metalsmith en exécutant la commande NPM Installez Metalsmith dans le terminal. Cela installera Metalsmith et toutes ses dépendances.
Pour créer un nouveau projet Metalsmith, naviguez d'abord dans le terminal vers le répertoire où vous souhaitez créer le projet. Ensuite, exécutez la commande metalsmith pour créer un nouveau projet. Cela créera un nouveau répertoire avec le nom de votre projet, et dans ce répertoire, il créera une structure de base pour votre site Web statique.
Pour ajouter des plugins à votre projet Metalsmith, vous devez les installer via NPM, puis les référer dans votre fichier de configuration Metalsmith. Par exemple, pour ajouter le plugin Markdown, vous devez d'abord exécuter NPM Installer Metalsmith-Markdown, puis dans votre fichier de configuration, vous devez ajouter var markdown = require (MetalSmith-Markdown '); )) Accédez à votre chaîne de construction Metalsmith.
Pour construire votre site Web Metalsmith, vous devez exécuter la construction de Metalsmith de commande dans le terminal. Cela compile tous les fichiers et les diffuse dans le répertoire de build, que vous pouvez ensuite déployer sur votre serveur.
Pour personnaliser la disposition de votre site Web Metalsmith, vous pouvez utiliser des moteurs de modèle tels que le guidon ou le jade. Ceux-ci vous permettent de créer des modèles réutilisables pour différentes parties de votre site Web, tels que les en-têtes, les pieds de page et les pages individuelles.
Pour ajouter du contenu à votre site Web Metalsmith, vous pouvez créer un fichier Markdown dans le répertoire source. Lors de la création d'un site Web, ces fichiers sont convertis en HTML. Vous pouvez également utiliser CMS tels que Netlify CMS pour gérer votre contenu.
Pour déployer votre site Web Metalsmith, vous pouvez utiliser des services tels que NetLify ou GitHub Pages. Ces services hébergeront votre site Web statique et déploieront automatiquement des modifications lorsque vous passerez au référentiel.
Pour mettre à jour votre site Web Metalsmith, vous modifiez simplement le fichier source et reconstruisez votre site Web. Les modifications seront reflétées dans le répertoire de build, que vous pouvez ensuite déployer sur votre serveur.
Oui, Metalsmith est très évolutif et peut être utilisé pour les sites Web grands et complexes. Sa structure modulaire vous permet d'ajouter des fonctionnalités selon les besoins, et son utilisation de fichiers statiques signifie qu'il peut gérer beaucoup de contenu sans ralentir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!