NextJS es un framework de JavaScript que permite crear aplicaciones web con React.
NextJS es un framework con el que podrás crear aplicaciones web Full Stack usando React, soportando también todo aquello que puedas necesitar del lado del servidor.
Con NodeJS podrás crear webs estáticas o también enlazarlas con un servidor. Para usar Markdown con Next.js, debes transformar tu contenido Markdown en algo que React pueda entender. Para poder usar tanto JSX como Markdown puedes usar Remark. Remark es capaz de compilar la sintaxis Markdown, generando código HTML. Soporta desde tablas hasta resaltado de sintaxis.
Para usar Markdown con NextJS también puedes usar el superset de Markdown MDX, que es lo más habitual. De este modo puedes conservar el diseñeo basado en componentes de React usando a su vez documentos Markdown. Por ejemplo, podrás redactar tu sintaxis Markdown en archivos con extensión .mdx
e incluir código React en su interior. Luego podrás incluir estos archivos como un componente. Este es el modo del que he creado esta web.
Para crear proyectos con NextJS necesitarás conocimientos de JavaScript y de React. También necesitarás tener Node.js en tu sistema y ciertos conocimientos básicos de la línea de comandos.
Para usar MDX con NextJS necesitarás instalar dos paquetes, que son el loader de MDX y el paquete Next.js + MDX.
El loader de MDX funciona junto con Babel y puedes instalarlo con este comando:
npm install @mdx-js/loader
Luego tendrás que configurar webpack editando el archivo webpack.config.js
:
module.exports = {
module: {
// …
rules: [
// …
{
test: /\.mdx?$/,
use: [
{
loader: '@mdx-js/loader',
/** @type {import('@mdx-js/loader').Options} */
options: {}
}
]
}
]
}
}
Podrás instalar el paquete Next.js + MDX con este comando:
npm install @next/mdx @mdx-js/loader @mdx-js/react
Para usarlo bastará con que requieras la libería usando la sentencia require
en el archivo next.config.js
:
const withMDX = require('@next/mdx')();
module.exports = withMDX();
Si quieres parsear archivos que tengan una extensión diferente a la extensión .mdx
, puedes configurarla editando en el archivo next.config.js
. En el siguiente ejemplo hemos agregado la extensión .md
:
const withMDX = require('@next/mdx')({
extension: /\.(md|mdx)$/,
});
module.exports = withMDX();
Existen también montones de Plugins que podrás usar. Puedes encontrarlos aqui. Puedes configurar los plugins desde el archivo next.config.js
:
const withMDX = require('@next/mdx')({
options: {
remarkPlugins: [],
rehypePlugins: [],
},
});
module.exports = withMDX();
La compatibilidad de Next.js con Markdown es excelente, soportando todos los elementos de la sintaxis básica de Markdown, así como los elementos de la sintaxis extendida, salvo alguna particularidad:
Elemento | Soporte | Notas |
---|---|---|
Encabezados | Sí | |
Párrafos | Sí | |
Saltos de línea | Sí | |
Negrita | Sí | |
Cursiva | Sí | |
Citas | Sí | |
Listas ordenadas | Sí | |
Listas no ordenadas | Sí | |
Código | Sí | |
Línea horizontal | Sí | |
Enlaces | Sí | |
Imágenes | Sí | |
HTML | Parcial | Soporta JSX |
Tablas | Sí | |
Bloques de código avanzados | Sí | |
Resaltado de sintaxis | Sí | |
Notas al pié | Sí | |
IDs de cabecera | Sí | |
Listas de definiciones | Sí | |
Texto tachado | Sí | Mediante ~~dos guiones ondulados~~ . |
Listas de tareas | Sí | |
Emojis (copiar y pegar) | Sí | |
Emojis (shortcodes) | No | |
Enlaces automáticos | Sí | |
Deshabilitar enlaces automáticos | Sí |
Laravel Markdown soporta también otros elementos no estándar de la sintaxis Markdown:
Elemento | Markdown | HTML | Resultado |
---|---|---|---|
Abreviaturas |
|
| La especificación HTML es mantenida por la asociación W3C. |
Si no te convence NextJS porque usa JavaScript, entonces también puedes probar el framework de PHP Laravel. Si tu intención es la de generar sitios estáticos, entonces una de tus mejores opciones es Hugo.
Si quieres saber más cosas acerca de NextJS, consulta los siguientes enlaces:
👋 Hola! Soy Edu, me encanta crear cosas y he redactado este tutorial. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirlo en Twitter.
Sígueme en Twitter para estar al día con mi contenido. 😊