Ajouter l'heure de la dernière modification
Apprenez à construire un plugin remark qui ajoute l’heure de la dernière modification au Front Matter de vos fichiers Markdown et MDX. Utilisez cette propriété pour afficher l’heure de modification dans vos pages.
Cette recette calcule la date en fonction de l’historique Git de votre dépôt, et celle-ci peut ne pas être précise sur certaines plateformes de déploiement. Votre hébergeur peut effectuer des clones superficiels qui ne récupèrent pas l’historique Git complet.
Recette
Titre de la section Recette-
Installer les paquets d’aide
Installez
Day.js
pour modifier et formater les heures :Fenêtre du terminal npm install dayjsFenêtre du terminal pnpm add dayjsFenêtre du terminal yarn add dayjs -
Créer un plugin Remark
Ce plugin utilise
execSync
pour lancer une commande Git qui renvoie l’horodatage du dernier commit au format ISO 8601. L’horodatage est ensuite ajouté au frontmatter du fichier.remark-modified-time.mjs import { execSync } from "child_process";export function remarkModifiedTime() {return function (tree, file) {const filepath = file.history[0];const result = execSync(`git log -1 --pretty="format:%cI" "${filepath}"`);file.data.astro.frontmatter.lastModified = result.toString();};}Utiliser le système de fichiers au lieu de Git
Bien que l’utilisation de Git soit la méthode recommandée pour obtenir la date de dernière modification d’un fichier, il est possible d’utiliser l’heure de modification du système de fichiers. Ce plugin utilise
statSync
pour obtenir lemtime
(heure de modification) du fichier au format ISO 8601. L’horodatage est ensuite ajouté au frontmatter du fichier.remark-modified-time.mjs import { statSync } from "fs";export function remarkModifiedTime() {return function (tree, file) {const filepath = file.history[0];const result = statSync(filepath);file.data.astro.frontmatter.lastModified = result.mtime.toISOString();};} -
Ajouter le plugin à votre configuration
astro.config.mjs import { defineConfig } from 'astro/config';import { remarkModifiedTime } from './remark-modified-time.mjs';export default defineConfig({markdown: {remarkPlugins: [remarkModifiedTime],},});Désormais, tous les documents Markdown auront une propriété
lastModified
dans leur frontmatter. -
Afficher l’heure de la dernière modification
Si votre contenu est stocké dans une collection de contenu, accédez au
remarkPluginFrontmatter
depuis la fonctionentry.render()
. Rendez ensuitelastModified
dans votre modèle à l’endroit où vous voulez qu’il apparaisse.src/pages/posts/[slug].astro ---import { CollectionEntry, getCollection } from 'astro:content';import dayjs from "dayjs";import utc from "dayjs/plugin/utc";dayjs.extend(utc);export async function getStaticPaths() {const blog = await getCollection('blog');return blog.map(entry => ({params: { slug: entry.slug },props: { entry },}));}const { entry } = Astro.props;const { Content, remarkPluginFrontmatter } = await entry.render();const lastModified = dayjs(remarkPluginFrontmatter.lastModified).utc().format("HH:mm:ss DD MMMM YYYY UTC");---<html><head>...</head><body>...<p>Dernière modification: {lastModified}</p>...</body></html>Si vous utilisez la mise en page Markdown, utilisez la propriété du frontmatter
lastModified
deAstro.props
dans votre modèle de mise en page.src/layouts/BlogLayout.astro ---import dayjs from "dayjs";import utc from "dayjs/plugin/utc";dayjs.extend(utc);const lastModified = dayjs().utc(Astro.props.frontmatter.lastModified).format("HH:mm:ss DD MMMM YYYY UTC");---<html><head>...</head><body><p>{lastModified}</p><slot /></body></html>