跳到主要内容

Marked

Marked是一个为了速度而构建的低级Markdown编译器,用于解析Markdown,而不进行缓存或长时间阻塞。它轻量级,同时实现了所有支持的Markdown版本和规范中的功能,并且可以作为命令行界面(CLI)使用,也可以在客户端或服务器端JavaScript项目中运行。

仍然在为比较分析定义指标。

尽可能少的依赖。

严格遵循可能会导致在运行比较基准测试时处理速度变慢。

示例

查看演示页面,以了解Marked如何工作⛹️。 这些文档页面也是使用marked渲染的💯。

安装

CLInpm install -g marked

浏览器

npm install marked

使用

警告:🚨 Marked不会清理输出HTML。如果您正在处理可能不受安全控制的字符串,请务必过滤可能的XSS攻击。一些过滤选项包括DOMPurify(推荐)、js-xss、sanitize-html和insane输出HTML!🚨

DOMPurify.sanitize(marked.parse('<img src="x" onerror="alert('not happening')">'));

⚠️ 输入:特殊零宽度Unicode字符(例如 \uFEFF)可能会干扰解析。一些文本编辑器会在文件开头添加这些字符(参见:#2139)。

// 从文件开头移除最常见的零宽度字符
marked.parse(
contents.replace(/^[\u200B\u200C\u200D\u200E\u200F\uFEFF]/,"")
)

CLI

# stdin输入示例
$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>
# 字符串输入示例
$ marked -s "*hello world*"
<p><em>hello world</em></p>
# 文件输入示例
echo "**bold text example**" > readme.md

$ marked -i readme.md -o readme.html
$ cat readme.html
<p><strong>bold text example</strong></p>
# 打印所有选项
$ marked --help

CLI 配置

可以使用配置文件来配置marked CLI。 如果它是一个.json文件,它应该是一个JSON对象,将作为选项传递给marked。 如果使用.js,它应该有默认导出一个marked选项对象或一个接受marked作为参数的函数。 它可以使用marked参数通过marked.use安装扩展。 默认情况下,marked CLI将按照以下顺序在你的主目录中查找配置文件。

~/.marked.json
~/.marked.js
~/.marked/index.js
# 自定义配置示例
echo '{ "breaks": true }' > config.json

$ marked -s 'line1\nline2' -c config.json
<p>line1<br>line2</p>

浏览器

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Marked in the browser</title>
</head>
<body>
<div id="content"></div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
document.getElementById('content').innerHTML =
marked.parse('# Marked in browser\n\nRendered by **marked**.');
</script>
</body>
</html>

或导入esm模块

<script type="module">
import { marked } from "https://cdn.jsdelivr.net/npm/marked/lib/marked.esm.js";
document.getElementById('content').innerHTML =
marked.parse('# Marked in the browser\n\nRendered by **marked**.');
</script>

Node.js

import { marked } from 'marked';
// 或 const { marked } = require('marked');

const html = marked.parse('# Marked in Node.js\n\nRendered by **marked**.');

Marked提供了高级配置和可扩展性。

支持的Markdown规范

我们积极支持以下Markdown版本的功能。

版本状态
原始markdown.pl未提供
CommonMark开发中
GitHub Flavored Markdown开发中

通过支持上述Markdown版本,Marked可以帮助您使用其他版本;然而,这些版本并不是社区积极支持的。

使用Marked的工具列表

我们积极支持Marked在快速Markdown转换中的可用性,以下是一些使用Marked进行单页应用创建的工具。

工具描述
zero-md一个本地Markdown-to-html网络组件,用于加载和显示外部MD文件。它使用Marked进行超快的Markdown转换。
texmeTeXMe是一个轻量级的JavaScript实用工具,用于创建自渲染Markdown + LaTeX文档。
StrapDown.jsStrapDown.js是一个出色的即时Markdown到HTML文本处理器。
raitoMini Markdown Wiki/CMS,占用8kb的JavaScript。
HomebreweryHomebrewery是一个用于制作类似D&D内容的Markdown工具。它根据MIT条款分发。

安全

唯一完全安全的系统是原本就不存在的系统。话虽如此,我们非常重视Marked的安全性。 因此,请通过电子邮件向项目提交者以及NPM中列出的所有者报告潜在的安全问题。我们将在48小时内提供安全报告的初步评估,并在2周内应用补丁(另外,请随时为问题贡献一个修复方案)。