Adicionar horário da última modificação
Aprenda a construir um plugin remark que adiciona o horário da última modificação como uma propriedade de frontmatter personalizada (EN) dos seus arquivos Markdown e MDX. Use essa propriedade para exibir o horário de modificação nas suas páginas.
Esta receita calcula o horário com base no histórico Git do seu repositório e pode não ser precisa em algumas plataformas de deploy. Seu provedor de hospedagem pode estar fazendo clones rasos, que não recuperam todo o histórico do Git.
Receita
Seção intitulada “Receita”-
Instale o
Day.jspara modificar e formatar horários, e o@astrojs/markdown-remarkpara usar o processadorunified()(EN):Terminal window npm install dayjs @astrojs/markdown-remarkTerminal window pnpm add dayjs @astrojs/markdown-remarkTerminal window yarn add dayjs @astrojs/markdown-remark -
Crie um plugin remark
Este plugin usa
execSyncpara executar um comando Git que retorna o timestamp do último commit no formato ISO 8601. O timestamp é então adicionado ao frontmatter do arquivo.remark-modified-time.mjs import { execSync } from "node: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();};}Usando o sistema de arquivos em vez do Git
Embora usar o Git seja a forma recomendada de obter o timestamp da última modificação de um arquivo, é possível usar o horário de modificação do sistema de arquivos. Este plugin usa
statSyncpara obter omtime(horário de modificação) do arquivo no formato ISO 8601. O timestamp é então adicionado ao frontmatter do arquivo.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();};} -
Adicione o plugin à sua configuração
astro.config.mjs import { unified } from '@astrojs/markdown-remark';import { defineConfig } from 'astro/config';import { remarkModifiedTime } from './remark-modified-time.mjs';export default defineConfig({markdown: {processor: unified({remarkPlugins: [remarkModifiedTime],}),},});Agora todos os documentos Markdown terão uma propriedade
lastModifiedno seu frontmatter. -
Exiba o horário da última modificação
Se o seu conteúdo está armazenado em uma coleção de conteúdo (EN), acesse o
remarkPluginFrontmattera partir da funçãorender(entry). Em seguida, renderizelastModifiedno seu template, em qualquer lugar onde quiser que ele apareça.src/pages/posts/[slug].astro ---import { getCollection, render } 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.id },props: { entry },}));}const { entry } = Astro.props;const { Content, remarkPluginFrontmatter } = await render(entry);const lastModified = dayjs(remarkPluginFrontmatter.lastModified).utc().format("HH:mm:ss DD MMMM YYYY UTC");---<html><head>...</head><body>...<p>Última modificação: {lastModified}</p>...</body></html>Se você está usando um layout Markdown, use a propriedade de frontmatter
lastModifieddeAstro.propsno template do seu layout.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>