Agregar superpoderes a tus archivos Markdown es posible gracias a MDX, una tecnología que combina Markdown con JavaScript y JSX, permitiendo el uso de variables y elementos dinámicos. En este curso, aprenderás a integrar esta herramienta poderosa en tu proyecto Astro.
¿Cómo realizar la instalación de MDX con npm?
Para comenzar, es esencial instalar la integración MDX. Sigue estos pasos:
Detener el entorno local: Antes de realizar la instalación, mata cualquier proceso que esté ejecutando tu entorno de desarrollo local.
Instalación con npm: Ejecuta el siguiente comando en la terminal para instalar MDX en la versión 0.16.0:
npminstall @astrojs/mdx@0.16.0
Configurar astro.config: Abre tu editor de código y busca el archivo astro.config en tus archivos del proyecto. Agrega el soporte MDX con el siguiente código:
Guarda los cambios para habilitar el soporte de archivos .mdx en tu proyecto.
¿Cómo crear y estructurar un archivo .mdx?
Con la configuración lista, es hora de crear un archivo .mdx y explorar sus posibilidades. Aquí te mostramos un ejemplo práctico:
Navega hasta la carpeta pages de tu proyecto y crea un archivo llamado contact.mdx.
Puedes comenzar añadiendo una lista de elementos que deseas utilizar en esta estructura. En este ejemplo, establecemos un título:
---title: "Contact"---# Hello World
Incluir JavaScript: Aprovecha MDX para añadir bloque de JavaScript. Por ejemplo, crea una constante date para mostrar una fecha:
exportconst date =newDate('2024-05-07');
Luego, muestra esa variable en tu documento:
### Fecha de publicación{date.toString()}
Bloques de Código y HTML: Añade bloques de código y HTML dentro de tu archivo .mdx para enriquecer el contenido:
```javascript
const date = new Date();
Y también puedes añadir HTML directamente:
<h1>Hello World</h1>
Estos pasos te permiten emplear tanto JavaScript como estructuras HTML dentro de tus archivos .mdx, ofreciendo una forma más dinámica y flexible de construir contenido.
¿Cómo verificar la correcta implementación?
El siguiente paso es probar que la integración de MDX ha sido exitosa:
Accede a tu navegador: Una vez guardado el archivo .mdx, abre tu navegador y ve al recurso recién creado. En este caso, accede a /contact en la barra de direcciones.
Verifica el contenido: Asegúrate de comprobar que se muestra tu título, la fecha de publicación, y las secciones de código correctamente renderizadas. Esto confirma que MDX funciona como se esperaba.
Utilizar MDX en Astro no solo enriquece el contenido que puedes crear, sino que también ofrece una interfaz elegante y adecuada para mostrar código y HTML, similar a lo que podrías encontrar en un editor de código.
Ahora, ¿por qué no capturas una pantalla de tu resultado final para compartir tus avances? Tu página de recomendaciones y tips en Astro está tomando forma y está más cerca de ser una realidad enriquecida con contenido interactivo. Sigue aprendiendo y explorando las múltiples capacidades que esta herramienta tiene para ofrecerte. ¡Nos vemos en la siguiente clase para continuar con las rutas dinámicas!
Con esto, Astro automáticamente instalará y configurará los archivos necesarios para que funcionen los archivos MDX, también agregará la configuración necesario en el archivo de configuración de Astro de forma automática.
---title:"Contact"layout:"../layouts/Base.astro"---exportconst date =newDate('2025-08-08');// JS# HolaMundo!La hora de publicación de este blog es:{date}```jsx
const date = new Date('2024-01-01')
```
Esta genial, lo use, gracias
Genio!
Me dio el siguiente error:
Expected ";" but found ":"
Para solucionarlo, coloqué esta línea de comandos en la terminal:
npx astro add mdx
Funcionó perfecto. Gracias!!
Gracias amigo, ni gpt lo pudo resolver xD
MDX
MDX permite usar JSX en su contenido markdown, que nos permite importar componentes, como gráficos interactivos o alertas, e incrustarlos en nuestro contenido, haciendo que el escribir contenido en Markdown con componentes sea una maravilla.
.
📌 Referencia
Markdown for the component era | MDX
.
Astro y MDX
Para integrar MDX en algún proyecto de Astro, de forma automática lanzamos el binario astro add mdx , configurando dicha herramienta como dependencia.
.
Para probar la integración, podemos generar una página con el formato .mdx :
export const title = 'My first MDX post'
# {title}
Frontmatter con MDX
La integración de Astro MDX incluye soporte para usar frontmatter en MDX de manera predeterminada.
.
✨ Concepto clavefrontmatter es una abstracción de la metadata vinculada al componente o página.
.
Para su empleo, anexamos el bloque de metadata y utilizado el objeto frontmatter:
---layout: '../layouts/default.astro'
title: 'My first MDX post'---# {frontmatter.title}
Componentes con MDX
Después de instalar la integración MDX, es posible importar y usar tanto los componentes de Astro como los componentes de los Frameworks/Librerías populares como ReactJS o VueJS, donde éstos últimos necesitan incluir como propiedad client:directive .
---layout: ../layouts/BaseLayout.astro
title: About me---import Button from '../components/Button.astro';
import ReactCounter from '../components/ReactCounter.jsx';
I live on **Mars** but feel free to <Buttontitle="Contact me"/>.
Here is my counter component, working in MDX:
<ReactCounterclient:load/>
Alguien sabe porqué se muestra 6 de mayo en el navegador, en lugar de 7 de mayo?
Hola Oscar,
me ha surgido el siguiente problema y no se como solucionarlo:
Cuando voy a la página localhost:4321//contact me sale el siguiente error con la sintaxis:
error Expected";" but found ":"File:/Users/mrjark/Desktop/to_practice/astro-handOn/platzi_/astroBuild_tips/src/pages/contact.mdx:2:5Code:1|--->2| title:'Contact';|^4|---
Según el error, debería tener un 'semicolon' pero no es así.
Podrías ayudarme?
Gracias
¿Lo pudo resolver? ¡Tengo el mismo problema!
Hola, tuve el mismo error. Lo que hice fue desinstalar las dependencias que previamente había instalado (valga la redundancia) y luego instalar todas las dependencias que Oscar sugiere, junto con sus respectivas versiones.
en el caso de que no les tome el formato de .mdx en su editor de código tienen que instalar la extensión del mismo. Aqí la doc de astro explica. @astrojs/mdx | Docs
Las comillas invertidas se hacen con alt+96
Terms and Conditions
Hola Devs, comparto información sobre que es JSX un recurso bastante bueno
Está muy bien explicado el uso de MDX y cómo utilizarlo. pero hay algo que no entiendo, por qué usar archivos Markdown?
Se supone que las páginas se crean con HTML, no sería más valioso seguir explorando los componentes o contenidos ya establecidos, como las plantillas de Tailwind?
Error
El codigo me corre sin ningun error hasta esta clase.
Use el codigo:
npminstall @astrojs/mdx@0.16.0
Abri el archivo astro.config.mjs he incorpore MDX.
⚠️ El problema viene cuando le agrego las lineas de codigo de MDX al archivo astro.config.mjs:
Alguien me podria ayudar? No tengo idea que estoy haciendo mal. He revisado el codigo miles de veces y ya se que es exactamente cuando agrego mdx.
No se si esto tenga que ver pero tambien agregue cdx al archivo de tailwind.config.cjs. (no cambio nada)
[21:18:19.001] Cloning github.com/user/astrobuild.tips (Branch: main, Commit: a010aed)[21:18:19.618] Cloning completed: 617.104ms
[21:18:19.825] Restored build cache
[21:18:19.850] Running "vercel build"[21:18:20.326] Vercel CLI 31.0.1
[21:18:20.866] Installing dependencies...
[21:18:21.775][21:18:21.775] up to datein 614ms
[21:18:21.775][21:18:21.776]212 packages are looking for funding
[21:18:21.776] run `npm fund`for details
[21:18:21.786] Detected `package-lock.json` generated by npm7+...
[21:18:21.787] Running "npm run build"[21:18:22.024][21:18:22.024]> @example/basics@0.0.1 build
[21:18:22.024]> astro build
[21:18:22.024][21:18:23.525] 01:18:23 AM [content] astro.md must be nested in a collection directory. Skipping.
[21:18:23.526] 01:18:23 AM [content] hello.md must be nested in a collection directory. Skipping.
[21:18:23.526] 01:18:23 AM [content] js.md must be nested in a collection directory. Skipping.
[21:18:23.527] 01:18:23 AM [content] Types generated 33ms
[21:18:23.528] 01:18:23 AM [build] output target: static
[21:18:23.528] 01:18:23 AM [build] Collecting build info...
[21:18:23.529] 01:18:23 AM [build] Completed in 431ms.
[21:18:23.530] 01:18:23 AM [build] Building static entrypoints...
[21:18:23.592][31m[@mdx-js/rollup] The argument 'path' must be a string or Uint8Array without null bytes. Received '\x00@astro-page:src/pages/contact@_@mdx'[39m
[21:18:23.592] file: [36m
Buenas tardes, aun sigo con el problema.
Aca les comparto el link de mi repo.
Cabe aclarar que los archivos .mdx y el proyecto como tal corre sin errores en local (en cuanto a lo que yo veo)
En Vercel el codigo se rompe una vez yo meto la informacion de la clase 14: MDX.
Les agradezco cualquier ayuda.
Feliz tarde.
Ya termine el curso y me di cuenta que todo estaba bien. Lo que hice mal fue tratar de hacer el Deployment de la pagina antes de. No sabia que debia configurar los parametros.
yo tengo el mismo error , pero me salta tambien este error en el archivo tsconfig.json
Cannot find type definition file for 'estree-jsx'.
The file is in the program because:
Entry point for implicit type library 'estree-jsx'
alguien me puede ayudar?
que buena la funcionalidad de escribir código y que se vea como tal! :0
Envio aca avance de mi pagina hecha con MDX, aproveche y cree un componente de formulario <ContactForm /> para la pagina de contact, muy interesante esa funcionalidad de MDX
Las comillas invertidas se hacen tecleando:
alt+96
Para los que le sale el error del ";" lo que hice fue instalar de nuevo mdx con el siguiente comando npm add @astrojs/mdx y volver a correr el proyecto.
En caso o tal de que no les funcione cuando y les aparezca el error del ; , lo que hice fue instalar la ultima versiónde MDX con npx astro add mdx, que se encuentra en al documentación de astro.
@astrojs/mdx | Docs
Estructura de archivos en el directoriosrcde Astro
El directorio src en Astro contiene la estructura principal de tu proyecto. Aquí se encuentran los archivos y carpetas que definen la organización, el contenido y la lógica de tu sitio web.
A continuación, se describe el contenido de cada carpeta dentro desrc:
1.components:
Contiene componentes reutilizables que se pueden usar en diferentes páginas de tu sitio web. Cada componente debe estar en una carpeta individual con el nombre del componente.
Los archivos dentro de cada carpeta de componente pueden incluir:
index.astro: El archivo principal del componente que define su contenido y comportamiento.
style.css: Los estilos CSS específicos del componente.
script.js: El código JavaScript que define la lógica del componente.
2.layouts:
Define las estructuras de página principales que se utilizan en tu sitio web. Cada layout debe estar en una carpeta individual con el nombre del layout.
Los archivos dentro de cada carpeta de layout pueden incluir:
index.astro: El archivo principal del layout que define su estructura HTML.
style.css: Los estilos CSS específicos del layout.
3.pages:
Contiene las páginas individuales de tu sitio web. Cada página debe estar en un archivo .astro individual con el nombre de la página.
Las páginas pueden usar componentes y layouts para definir su contenido y estructura.
4.public:
Contiene archivos estáticos que se sirven sin procesar por Astro. Estos pueden incluir imágenes, archivos JavaScript, CSS o cualquier otro tipo de archivo que no requiera procesamiento.
5.static:
Similar a public, pero estos archivos se copian sin modificaciones a la carpeta de salida durante la compilación. Se pueden usar para almacenar archivos que no necesitan ser procesados por Astro, como imágenes o archivos de configuración.
6.styles:
Contiene los estilos CSS globales para tu sitio web.
7.utils:
Contiene archivos JavaScript que se pueden usar en diferentes partes de tu sitio web para compartir lógica o funcionalidades comunes.
Lógica del sistema de archivos:
Astro utiliza un sistema de archivos basado en componentes para organizar el contenido de tu sitio web. Los componentes son unidades reutilizables de código que se pueden combinar para crear páginas y layouts.
Las principales características del sistema de archivos de Astro son:
Enrutamiento: Astro usa la estructura de archivos para determinar la ruta de cada página. La ruta se define por el nombre del archivo .astro dentro de la carpeta pages.
Componentes: Los componentes se pueden usar para crear contenido modular y reutilizable.
Layouts: Los layouts definen la estructura general de las páginas de tu sitio web.
Procesamiento de archivos: Astro procesa los archivos .astro para generar HTML, CSS y JavaScript.
Relaciones:
Pages:
Utilizan componentes para definir su contenido.
Utilizan layouts para definir su estructura.
Components:
Se pueden usar en diferentes páginas.
No tienen una relación directa con layouts.
Layouts:
No tienen contenido propio.
Se utilizan para definir la estructura de las páginas que los utilizan.
En resumen:
Pages: Definen el contenido de las páginas.
Components: Definen unidades reutilizables de contenido.
Layouts: Definen la estructura general de las páginas.
Ejemplo:
Imagina que tienes una página web con una página de inicio, una página de blog y una página de contacto.
La página de inicio podría usar un layout principal que define el encabezado, el pie de página y la barra lateral.
La página de blog podría usar el mismo layout principal, pero con un contenido diferente en el área principal.
La página de contacto podría usar un layout diferente con un formulario de contacto.
Los componentes se pueden usar en cualquiera de estas páginas para agregar contenido reutilizable, como un botón de llamada a la acción o un widget de redes sociales.