Trabajo con Markdown en Node.js: bibliotecas para análisis y conversión
\n\nMarkdown es un lenguaje de marcado ligero, ampliamente utilizado para formatear texto en documentación, archivos README, blogs y sistemas de gestión de contenido. En el ecosistema de Node.js existen varias bibliotecas potentes que permiten analizar Markdown y convertirlo a HTML, así como realizar la operación inversa. En este artículo, revisaremos tres de las herramientas más populares: marked, showdown y remarkable, sus características, API y ejemplos de uso.
\n\n1. Biblioteca marked
\n\nmarked es un analizador de Markdown rápido y ligero que soporta todos los elementos básicos de sintaxis (encabezados, listas, enlaces, imágenes, código, tablas, etc.). Se destaca por su alto rendimiento y facilidad de configuración.
\n\nInstalación
\nnpm install marked\n\nUso básico
\nPara convertir una cadena Markdown a HTML, basta con llamar a la función marked():
const marked = require('marked');\n\nconst markdownText = `\n# ¡Hola, mundo!\n\nEste es **texto en negrita** y *cursiva*.\n\n- Elemento de lista 1\n- Elemento de lista 2\n\n[Enlace a PythonLib](https://pythonlib.ru)\n`;\n\nconst html = marked(markdownText);\nconsole.log(html);\n\n\nResultado de la ejecución:
\n<h1>¡Hola, mundo!</h1>\n<p>Este es <strong>texto en negrita</strong> y <em>cursiva</em>.</p>\n<ul>\n<li>Elemento de lista 1</li>\n<li>Elemento de lista 2</li>\n</ul>\n<p><a href="https://pythonlib.ru">Enlace a PythonLib</a></p>\n\nConfiguración de opciones
\nmarked admite múltiples opciones para personalizar la salida:
\nconst marked = require('marked');\n\nmarked.setOptions({\n breaks: true, // convertir saltos de línea en <br>\n gfm: true, // habilitar GitHub Flavored Markdown (tablas, tachado, etc.)\n headerIds: false, // no agregar ID a los encabezados\n mangle: false, // no escapar direcciones de correo electrónico\n sanitize: false // no eliminar etiquetas HTML (peligroso, usar con precaución)\n});\n\nconst html = marked('Línea 1\\nLínea 2');\nconsole.log(html); // Mostrará con <br> entre líneas\n\n\nUso síncrono y asíncrono
\nPor defecto, marked() funciona de forma síncrona, pero también admite el modo asíncrono mediante promesas:
const marked = require('marked');\n\nasync function convertMarkdown(text) {\n const html = await marked.parse(text);\n return html;\n}\n\nconvertMarkdown('# Encabezado').then(console.log);\n\n\n2. Biblioteca showdown
\n\nshowdown es otro analizador de Markdown popular que puede funcionar tanto en el navegador como en Node.js. Proporciona una API extensible y admite múltiples extensiones.
\n\nInstalación
\nnpm install showdown\n\nUso básico
\nCree una instancia del convertidor y llame al método makeHtml():
const showdown = require('showdown');\nconst converter = new showdown.Converter();\n\nconst markdownText = '## Subencabezado\\n\\nTexto normal con **énfasis**.';\nconst html = converter.makeHtml(markdownText);\nconsole.log(html);\n\n\nResultado:
\n<h2>Subencabezado</h2>\n<p>Texto normal con <strong>énfasis</strong>.</p>\n\nExtensiones y personalización
\nshowdown permite agregar extensiones personalizadas, por ejemplo, para soportar emojis o fórmulas LaTeX:
\nconst showdown = require('showdown');\n\n// Creamos una extensión para reemplazar :smile: por un emoji\nconst emojiExtension = function() {\n return [{\n type: 'lang',\n regex: /:smile:/g,\n replace: '😊'\n }];\n};\n\n También en la biblioteca
Configuración de aplicaciones Swift (iOS/macOS): bibliotecas y herramientas
Compression en JavaScript (Node.js): guía completa con ejemplos
OpenAI SDK para JavaScript (Node.js): guía completa con ejemplos
Internacionalización (i18n) en TypeScript: guía completa