Node.js 中的 Markdown 处理:marked、showdown 和 remarkable 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Node.js 中处理 Markdown:用于解析和转换的库



Markdown 是一种轻量级标记语言,广泛用于文档、README 文件、博客和内容管理系统中的文本格式化。在 Node.js 生态系统中,有几个强大的库可以解析 Markdown 并将其转换为 HTML,以及执行反向操作。在本文中,我们将介绍三种最流行的工具:marked、showdown 和 remarkable,以及它们的特点、API 和使用示例。



1. marked 库



marked 是一个快速且轻量级的 Markdown 解析器,支持所有主要的语法元素(标题、列表、链接、图片、代码、表格等)。它具有高性能和易于配置的特点。



安装

npm install marked


基本用法

要将 Markdown 字符串转换为 HTML,只需调用 marked() 函数:

const marked = require('marked');

const markdownText = `# 你好,世界!

这是 **粗体文本** 和 *斜体*。

- 列表项 1- 列表项 2

[链接到 PythonLib](https://pythonlib.ru)`;

const html = marked(markdownText);console.log(html);


执行结果:

<h1>你好,世界!</h1><p>这是 <strong>粗体文本</strong> 和 <em>斜体</em>。</p><ul><li>列表项 1</li><li>列表项 2</li></ul><p><a href="https://pythonlib.ru">链接到 PythonLib</a></p>


选项配置

marked 支持多种选项来自定义输出:

const marked = require('marked');

marked.setOptions({ breaks: true, // 将换行符转换为 <br> gfm: true, // 启用 GitHub 风格的 Markdown(表格、删除线等) headerIds: false, // 不为标题添加 ID mangle: false, // 不转义电子邮件地址 sanitize: false // 不删除 HTML 标签(危险,请谨慎使用)});

const html = marked('第1行第2行');console.log(html); // 输出中行之间包含 <br>


同步和异步使用

默认情况下,marked() 是同步工作的,但也通过 Promise 支持异步模式:

const marked = require('marked');

async function convertMarkdown(text) { const html = await marked.parse(text); return html;}

convertMarkdown('# 标题').then(console.log);


2. showdown 库



showdown 是另一个流行的 Markdown 解析器,既可以在浏览器中运行,也可以在 Node.js 中运行。它提供了可扩展的 API,并支持多种扩展。



安装

npm install showdown


基本用法

创建一个转换器实例并调用 makeHtml() 方法:

const showdown = require('showdown');const converter = new showdown.Converter();

const markdownText = '## 副标题

带有 **强调** 的普通文本。';const html = converter.makeHtml(markdownText);console.log(html);


结果:

<h2>副标题</h2><p>带有 <strong>强调</strong> 的普通文本。</p>


扩展和自定义

showdown 允许添加自定义扩展,例如支持表情符号或 LaTeX 公式:

const showdown = require('showdown');

// 创建一个将 :smile: 替换为表情符号的扩展const emojiExtension = function() { return [{ type: 'lang', regex: /:smile:/g, replace: '😊' }];};

推荐