Trabalhando com Markdown em Node.js: bibliotecas para parsing e conversão
\n\nMarkdown é uma linguagem de marcação leve, amplamente utilizada para formatar texto em documentação, arquivos README, blogs e sistemas de gerenciamento de conteúdo. No ecossistema Node.js, existem várias bibliotecas poderosas que permitem fazer o parsing de Markdown e convertê-lo para HTML, bem como realizar a operação inversa. Neste artigo, vamos explorar três das ferramentas mais populares: marked, showdown e remarkable, suas características, API e exemplos de uso.
\n\n1. Biblioteca marked
\n\nmarked é um parser de Markdown rápido e leve, que suporta todos os elementos básicos de sintaxe (cabeçalhos, listas, links, imagens, código, tabelas, etc.). Ele se destaca pelo alto desempenho e facilidade de configuração.
\n\nInstalação
\nnpm install marked\n\nUso básico
\nPara converter uma string Markdown em HTML, basta chamar a função marked():
const marked = require('marked');\n\nconst markdownText = `\n# Olá, mundo!\n\nEste é um **texto em negrito** e *itálico*.\n\n- Item de lista 1\n- Item de lista 2\n\n[Link para PythonLib](https://pythonlib.ru)\n`;\n\nconst html = marked(markdownText);\nconsole.log(html);\n\n\nResultado da execução:
\n<h1>Olá, mundo!</h1>\n<p>Este é um <strong>texto em negrito</strong> e <em>itálico</em>.</p>\n<ul>\n<li>Item de lista 1</li>\n<li>Item de lista 2</li>\n</ul>\n<p><a href="https://pythonlib.ru">Link para PythonLib</a></p>\n\nConfiguração de opções
\nO marked suporta várias opções para customizar a saída:
\nconst marked = require('marked');\n\nmarked.setOptions({\n breaks: true, // converter quebras de linha em <br>\n gfm: true, // habilitar GitHub Flavored Markdown (tabelas, tachado, etc.)\n headerIds: false, // não adicionar IDs aos cabeçalhos\n mangle: false, // não escapar endereços de email\n sanitize: false // não remover tags HTML (perigoso, use com cuidado)\n});\n\nconst html = marked('Linha 1\\nLinha 2');\nconsole.log(html); // Exibirá com <br> entre as linhas\n\n\nUso síncrono e assíncrono
\nPor padrão, marked() funciona de forma síncrona, mas também suporta modo assíncrono através de promises:
const marked = require('marked');\n\nasync function convertMarkdown(text) {\n const html = await marked.parse(text);\n return html;\n}\n\nconvertMarkdown('# Título').then(console.log);\n\n\n2. Biblioteca showdown
\n\nshowdown é outro parser de Markdown popular que pode funcionar tanto no navegador quanto no Node.js. Ele oferece uma API extensível e suporta várias extensões.
\n\nInstalação
\nnpm install showdown\n\nUso básico
\nCrie uma instância do conversor e chame o método makeHtml():
const showdown = require('showdown');\nconst converter = new showdown.Converter();\n\nconst markdownText = '## Subtítulo\\n\\nTexto normal com **destaque**.';\nconst html = converter.makeHtml(markdownText);\nconsole.log(html);\n\n\nResultado:
\n<h2>Subtítulo</h2>\n<p>Texto normal com <strong>destaque</strong>.</p>\n\nExtensões e customização
\nO showdown permite adicionar extensões personalizadas, por exemplo, para suporte a emojis ou fórmulas LaTeX:
\nconst showdown = require('showdown');\n\n// Criando uma extensão para substituir :smile: por emoji\nconst emojiExtension = function() {\n return [{\n type: 'lang',\n regex: /:smile:/g,\n replace: '😊'\n }];\n};\n\n Também na biblioteca
Cliente Elasticsearch para Java: guia completo de conexão e operação
Rate Limiting em Go (Golang): bibliotecas, padrões e exemplos de implementação
Cliente Redis para TypeScript: ioredis e redis
Trabalho com arquivos ZIP em Go (Golang): criação, leitura e extração de arquivos
Processamento de imagens em Go: redimensionamento e corte (resize, crop)