Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Sergio Daniel Xalambrí
Sergio Daniel Xalambrí

Posted on • Originally published atsergiodxa.com

     

Presentando Contentz

Publicado originalmente enhttps://sdx.im/articles/presentando-contentz/

Hace unos días escribí sobreque esperaría de mi generador de sitios estáticos ideal, hoy presentoContentz. Lo llamo un Pure Static Site Generator porque solo usa JavaScript en el navegador para crear un Service Worker mínimo que se encarga de guardar en cache todo el sitio.

Empezando a usarlo

Para usar Contentz lo primero es instalarlo, se puede instalar usandonpm

npminstallcontentz
Enter fullscreen modeExit fullscreen mode

O también usando yarn.

yarn add contentz
Enter fullscreen modeExit fullscreen mode

Una vez instalado hay que crear un archivo de configuración (muy pequeño) con la siguiente información.

---title:Sergio Xalambrídescription:Senior Software Engineer and Technical Writerdomain:https://sergiodxa.com
Enter fullscreen modeExit fullscreen mode

En este archivo se agrega el título del sitio, la descripción y el dominio donde va a estar alojado (necesario para el feed RSS). Una vez hecho esto hay que crear una carpetaarticles y/o una carpetapages. Ambas son opcionales, puede haber artículos sin páginas personalizadas o páginas personalizadas sin artículos.

Ya con las carpetas creadas hay que decirle a Contentz que construya el sitio web.

contentz build
Enter fullscreen modeExit fullscreen mode

Con esto Contentz lee los artículos y páginas y va a crear una carpeta/public en el proyecto con el HTML de cada una, además va a generar unindex.html y un/public/articles/index.html donde se van a listar todos los artículos.

Eso es todo, ahora solo es necesario desplegar nuestra carpeta/public a un servidor para que esté online, para esto pueden usarNetlify.

Escribe en MDX, publica en HTML optimizado

Contentz usa MDX para tu contenido junto a Frontmatter para la metadata, un ejemplo de artículo sería este.

---title:Presentando Contentzdescription:Contentz, un Pure Static Site Generator para obtener un sitio web super optimizadodate:2019-03-05T21:03:17.909Zpublished:truelang:estags:Contentz, SSG, Spanish, Website---Hace unos días escribí sobre[que esperaría de mi generador de sitios estáticos ideal](/articles/generador-sitios-estaticos-propio), hoy presento[Contentz](https://github.com/sergiodxa/contentz). Lo llamo un Pure Static Site Generator porque solo usa JavaScript en el navegador para crear un Service Worker mínimo que se encarga de guardar en cache todo el sitio.
Enter fullscreen modeExit fullscreen mode

Contentz lee este contenido y lo renderiza a HTML al momento de construir el sitio. Durante este proceso obtiene todos los enlaces a contenido del mismo sitio (como/articles/generador-sitios-estaticos-propio en el ejemplo) y agrega una etiqueta<link rel="prefetch" href="/articles/generador-sitios-estaticos-propio" />, esto le dice al navegador que tiene que hacer prefetch de la página, lo que significa que cuando una persona haga click en el enlace va a cargar inmediatamente ya que, en realidad, el navegador ya descargó el HTML en background.

Otra detalle especial es que todo el CSS está en etiquetas<style> directo en el HTML y el único archivo JavaScript que se carga es para el Service Worker que se genera, esto hace que la carga sea mucho más rápida al no necesitar ejecutar mucho JavaScript en el navegador o descargar hojas de estilos CSS.

Construye el sitio de forma incremental

Algo que siempre me molestó de otros generadores de sitios estáticos es que cada vez que necesito construir el sitio lo hace desde cero, aunque solo cambió un archivo. En cambio, Contentz, al tener control de todo el diseño y limitarte a escribir artículos y páginas puede fácilmente detectar que cambió y solo generar el HTML de las páginas afectadas.

Esto permite ir construyendo el sitio web de forma incremental. 🤯

En caso de que se desee deshabilitar esta funcionalidad simplemente hay que agregar alconfig.yml la reglaincremental: false (en caso de sertrue o no existir está habilitado). Esto puede ser útil para forzar a regenerar todo el sitio o por si tu hosting guarda cache la carpeta.cache, usada por Contentz para saber que cambió, pero no/public para guardar el HTML creado anteriormente.

Compartir enlaces

Algo que me gusta mucho escompartir enlaces de sitios web interesantes que leo, Contentz soporta esta funcionalidad permitiéndome crear un archivolinks.yml con un código similar a este.

----url:https://htmlreference.io/title:HTML Referencecomment:An incredible and complete guide of all the HTML tags with visual examplesdate:2019-01-28T19:44:10.945Z
Enter fullscreen modeExit fullscreen mode

Al decirle a Contentz que construya un sitio web este va a crear una lista, similar a la de artículos, en/links/ con todos los enlaces que existan en este archivo. Además va a agregar un enlace automáticamente en el header llamadoLink que apunte a esta página y se va a encargar de hacerle prefetch automáticamente.

Offline First automático

Contentz genera un Service Worker con un código mínimo, para ser exactos con este código

importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.0.0/workbox-sw.js"),workbox&&workbox.routing.registerRoute(o=>location.origin&&o.url.origin&&"/load-sw.js"!==o.url.pathname&&"/sw.js"!==o.url.pathname,newworkbox.strategies.NetworkFirst);
Enter fullscreen modeExit fullscreen mode

Ese código lo que hace es guardar en cache todas las peticiones HTTP que se hagan al mismo sitio excepto/load-sw.js y/sw.js, ya que no queremos cachear nuestro Service Worker y tener problemas al actualizar luego. Una vez guardados en cache siempre que el usuario tenga conexión a internet va a mandar una petición HTTP normal y responderle al usuario con lo que mande el servidor, pero en caso de que el usuario pierda su acceso a internet va a responder con la cache.

Esto significa que el usuario una vez acceda a la página pueder volver a verla incluso si está offline. Gracias al uso de prefetch el usuario también puede acceder a otras páginas que no entró directamente ya que el navegador ya las pidió antes y por tanto el Service Worker ya las guardó en cache, por ejemplo si el usuario accede a la lista de artículos en/articles/ entonces el Service Worker va a tener en cache todos los artículos para acceso offline, si no tienen imágenes o nada externo el usuario debería poder navegar por el sitio offline sin problemas.

Feed RSS

Aunque muchos no lo usan, personalmente me gusta mucho RSS para enterarme de nuevos artículos en blogs que sigo. Por eso es que Contentz lee todos tus artículos y genera un feed RSS en/atom.xml con la lista, encaso de que cambie un archivo se generaría de nuevo el feed RSS con los artículos nuevos o actualizados.

Archivos estáticos

Usar archivos estáticos también es algo común en cualquier sitio web, para poner imágenes por ejemplo. Contentz soporta esto permitiendo que crees una carpeta/static con tu contenido estático, dentro puede haber cualquier archivo o carpeta, Contentz simplemente va a copiar todo/static a/public/static, de forma que si en un artículo o página se carga una imágen la carpeta/static va a existir dentro de/public correctamente.

Generador de imágenes sociales

Algo super tedioso al publicar un blog es crear imágenes sociales, un Open Graph básicamente, al punto de que históricamente o no tenía un Open Graph o estaba usando uno genérico, Contentz tiene una función para generar estos Open Graph por si solo, para esto hay que ejecutar el siguiente comando.

contentz social <path>
Enter fullscreen modeExit fullscreen mode

Donde<path> es el archivo cuyo Open Graph queremos generar, por ejemplocontentz social articles/hello-world.mdx va a generar el Open Graph del artículohello-world.mdx

Para las páginas especiales es necesario también ejecutarlo, pero en estos casos usando nombres fijos que son

  • home
  • error
  • articles/archive (ambos funcionan)
  • links

Entonces al iniciar un sitio sería necesario ejecutarcontentz social home error articles links al menos una vez, como pueden ver además es posible pasar más de un archivo a la vez.

Todas las imágenes generadas por Contentz van a estar ubicadas en/static/_social y todos los artículos automáticamente cargan su Open Graph desde las carpetas correctas sin tener que hacer nada, así que una vez generado el Open Graph ya va a funcionar de una.

Estilos directo en MDX

Otra posibilidad de MDX es agregar estilos directo en tu MDX, internamente Contentz usaEmotion para el CSS y carga tantojsx como el template literalcss por lo que es posible estilizar de dos formas.

<divcss={{color:"red"}}>This is red</div><divcss={css`color: blue`}>This is blue</div>
Enter fullscreen modeExit fullscreen mode

Ya sea usando el propcss con un objeto o con el resultado del template literalcss para poner CSS usando la sintaxis normal de CSS, ambos casos funcionan y permiten agregar estilos a elementos directo en el MDX.

Páginas especiales

Como ya mencioné en otras partes, hay ciertas páginas especiales, estas son/ (la home),/articles/ (la lista de artículos),/links/ (la lista de enlaces compartidos) y/404.html (la página de error). Estas páginas se generan solas sin que tengas que escribir nada.

Home (/)

Esta página se genera siempre, sirve de página de inicio, usa eltitle ydescription de tuconfig.yml para mostrarlos en el contenido. Se pueden agregar además links a redes sociales agregando la siguiente configuración

social:twitter:sergiodxagithub:sergiodxanpm:sergiodxalinkedin:sergiodxadev:sergiodxameetup:182915204
Enter fullscreen modeExit fullscreen mode

Esa además es la lista de redes sociales soportadas actualmente. Adicionalmente es posibleemail: hello@sergiodxa.com alconfig.yml para que se agregue junto a las redes sociales un ícono de email.

Lista de artículos (/articles/)

La lista de artículos es bien simple, se genera automáticamente con todos los artículos que tenganpublished: true en su frontmatter, eso es todo lo que se puede modificar de la lista, con solo tener un artículo alcanza para que se genere y siempre está enlazada en el header.

Lista de enlaces (/links/)

Similar a la lista de artículos la lista de enlaces no tiene mucha configuración, solo agregar unlinks.yml y se va a generar con los enlaces, cada enlaces en dicho archivo se agrega.

Error 404 (/404.html)

Esta página se genera para poder manejar los 404 con un diseño acorde al resto del sitio y enlaces a otras secciones. Se genera solo sin necesidad de configurar nada, aunque es probable que en el proveedor de hosting sea necesario configurar que muestre este archivo en caso de no encontrar alguna página.

Enlace a Patreon

Yo tengo unPatreon donde a quién le gusten mis artículos o el contenido que creo pueden apoyarme monetariamente. Como esto es algo cada vez más común Contentz soporta esto y permite agregarpatreon: sergiodxa al archivoconfig.yml para que se agregue en la home y al final de cada página y artículo un mensaje con el enlace a Patreon.

Editar en GitHub

Mi sitio personalestá en GitHub en un repositorio público, y en caso de querer editarlo o que alguien que lo lea quiere editar es posible simplemente mandar un Pull Request con los cambios. Contentz también soporta este caso y permite agregarrepository: https://github.com/sergiodxa/personal-site/ alconfig.yml para mostrar un enlace al final de cada artículo o página que diceEditor on GitHub para sugerir poder editarlo y enlaza directo al respositorio en el archivo correcto.

Navegación

El header es generado solo con el enlace a/links/ y a la lista de artículos en/articles/, en caso de tener páginas personalizadas o querer enlazar a algún otro lado se pueden agregar enlaces extras en elconfig.yml agregando

navigation:-name:Servicespath:/services/
Enter fullscreen modeExit fullscreen mode

Cada grupo dename ypath va a ser un enlace en el header.

Palabras finales

Contentz no es un trabajo 100% terminado, pero estoy bastante contento con el resultado, en todas las pruebas que hice el sitio carga muy rápido y pase de tardar minutos en hacer deploy de mi sitio a segundos, con la funcionalidad de incremental activada incluso¡Menos de un segundo! Eso es muy rápido a comparación.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Location
    Lima, Perú
  • Work
    Web Developer at Daffy.org
  • Joined

More fromSergio Daniel Xalambrí

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp