Cómo obtener el valor actualizado / última modificación para archivos estáticos para el mapa del sitio de Gatsby
He estado usando Gatsby y he estado intentando crear un sitemap
con valores lastmod
para páginas estáticas (src/pages
). Vi un trozo de código aleatorio en el que alguien ejecutó la consulta que se muestra a continuación dentro de su archivo gatsby-config.js
y pudo obtener la fecha en que las modificó por última vez.
graphql
allSitePage {
nodes {
path
context {
updated
}
}
}
No he logrado lograr lo mismo.
Esto es lo que he intentado hasta ahora. He supuesto que estaba utilizando un gestor de contexto y configuré el contexto dentro de sus archivos js
y actualicé el valor del contexto manualmente cada vez que editó los archivos.
const Updated = React.createContext('2021-11-29')
class IndexPage extends React.Component {
render() {
return (
<div>
{/* Ejemplo */}
</div>
)
}
}
/* También intenté IndexPage.contextType = Updated */
IndexPage.useContext = Updated
export default IndexPage
He vuelto a ejecutar la consulta, pero no he podido pasar el valor para que se vea dentro de la consulta de graphql
. Esta es la consulta que ejecuté en Graphql playbook.
consulta MyQuery {
allSitePage {
nodes {
id
contexto {
updated
}
}
}
}
Así es como se ve toda mi estructura de datos en el Graphql playbook: [insertar enlace de imagen]
¿Cómo podría obtener/establecer un valor updated
que se utilizaría en gatsby-config.js
al crear un sitemap?
davy.ai
Basándonos en lo que has intentado hasta ahora, parece que estás tratando de usar el contexto de React para pasar datos a tu consulta de GraphQL. Sin embargo, esto no funcionará porque GraphQL se ejecuta en tiempo de compilación, antes de que se rendericen los componentes de React. Por lo tanto, tendrás que encontrar un enfoque diferente para pasar el valor
updated
a tu archivogatsby-config.js
.Una posible solución es utilizar una API de Gatsby Node llamada
onCreateNode
. Esta API se llama cada vez que se crea un nuevo nodo en tu sitio de Gatsby, y te permite modificar los datos de ese nodo antes de que sean procesados por Gatsby.Aquí tienes un ejemplo de código que demuestra cómo podrías usar
onCreateNode
para agregar un campoupdated
a cada nodoSitePage
basándote en la fecha de modificación del archivo correspondiente:Lo que hace este código es:
SitePage
.createFilePath
para generar una ruta de archivo para cada página basándonos en los datos de sunode
y su nodofile
padre.parent
del nodoSitePage
.modifiedTime
de los datos del archivo.updated
a cada nodoSitePage
, utilizando la funcióncreateNodeField
proporcionada por Gatsby. Este campo contendrá el timestamp de modificación del archivo correspondiente.Una vez que tienes este campo
updated
agregado a tus nodosSitePage
, puedes consultarlo en tu archivogatsby-config.js
de esta manera:Ten en cuenta que estamos usando
field.updated
en lugar decontext.updated
, ya que agregamos el campoupdated
usandocreateNodeField
en lugar decreatePage
.Con este campo
updated
agregado a tus nodosSitePage
, ¡deberías poder generar un mapa del sitio con los valoreslastmod
que buscas!