Processamento de Markdown em Node.js: bibliotecas marked, showdown e remarkable

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Markdown em Node.js: bibliotecas para parsing e conversão

\n\n

Markdown é 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\n

1. Biblioteca marked

\n\n

marked é 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\n

Instalação

\n
npm install marked
\n\n

Uso básico

\n

Para converter uma string Markdown em HTML, basta chamar a função marked():

\n
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\n

Resultado 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\n

Configuração de opções

\n

O marked suporta várias opções para customizar a saída:

\n
const 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\n

Uso síncrono e assíncrono

\n

Por padrão, marked() funciona de forma síncrona, mas também suporta modo assíncrono através de promises:

\n
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\n

2. Biblioteca showdown

\n\n

showdown é 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\n

Instalação

\n
npm install showdown
\n\n

Uso básico

\n

Crie uma instância do conversor e chame o método makeHtml():

\n
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\n

Resultado:

\n
<h2>Subtítulo</h2>\n<p>Texto normal com <strong>destaque</strong>.</p>
\n\n

Extensões e customização

\n

O showdown permite adicionar extensões personalizadas, por exemplo, para suporte a emojis ou fórmulas LaTeX:

\n
const 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                    

Recommendations