今天逛Github,又刷到 marked 这个开源项目。仓库简介就一句话:A markdown parser and compiler. Built for speed. 翻译过来就是:一款 Markdown 解析器和编译器,速度极快。。
它不是今年才冒出来的。项目从 2011 年就在写了,到现在还有 3.7 万多 Star,npm 上一周能下五千多万次。很多博客、文档站、在线编辑器,背后其实都在用它。今天锋哥和大家来好好聊聊 marked 这个优秀的开源项目。
目录
它到底是干嘛的
为啥大家还在用它
它内部大概怎么走
上手其实就几行代码
想改输出长什么样也行
它到底是干嘛的
你写了一篇 Markdown,标题、加粗、列表、代码块都有。浏览器看不懂这些符号,它只认识 HTML。marked 干的活,就是把 # 标题 变成 ,把 **加粗**
变成 。
官网自己也说得很直接:
为速度而生
体积很小,零依赖
浏览器、Node.js、命令行都能跑
想加自定义语法,也留了接口
CommonMark 基本全覆盖,GitHub 那种表格、任务列表、删除线也支持得差不多了。日常写博客、做文档预览,够用。
为啥大家还在用它
Markdown 解析器其实不少,remark、markdown-it 也都挺有名。marked 还能一直火,我觉得就三点:
第一,轻。 不带一堆依赖,丢进前端项目也不会把体积撑得很夸张。
第二,快。 它不搞复杂缓存,也不长时间卡住主线程。官网文档页自己就是用 marked 渲染的,多少有点自信。
第三,用的地方多。 浏览器里实时预览、服务器上批量转 HTML、命令行直接出文件,同一套 API 就能干。
它内部大概怎么走
你不用把源码看一遍。记住这条流水线就行:先把文本拆成一块块 token,再按规则拼成 HTML。
中间那一层 token 挺有用。以后你想改标题样式、给代码块加高亮,不用重写整个解析器,改渲染那一步就够了。
上手其实就几行代码
先装上:
Node.js 里最常见的写法:
import { marked } from 'marked';
const markdown = `# 今天也在写文档
这是一段 **加粗** 的文字。
- 安装简单- 速度很快- 浏览器和 Node 都能用`;
const html = marked.parse(markdown);console.log(html);
跑完大概会得到:
<h1>今天也在写文档h1><p>这是一段 <strong>加粗strong> 的文字。p><ul> <li>安装简单li> <li>速度很快li> <li>浏览器和 Node 都能用li>ul>
不想包一层 的时候,用 parseInline:
marked.parse('**加粗** _斜体_');// <p><strong>加粗strong> <em>斜体em>p>
marked.parseInline('**加粗** _斜体_');// <strong>加粗strong> <em>斜体em>
浏览器里也能直接用 CDN,适合做个本地预览页:
html><html><head> <meta charset="utf-8" /> <title>Marked 预览title>head><body> <div id="content">div> <script src="https://cdn.jsdelivr.net/npm/marked/lib/marked.umd.js">script> <script> document.getElementById('content').innerHTML = marked.parse( '# 浏览器里也能跑\n\n渲染这件事,交给 **marked** 就行。' );
script>body>html>
命令行也有。装好全局命令后,文件进,HTML 出:
npm install -g markedmarked -i readme.md -o readme.html
默认就开了 GFM。表格、任务列表这些 GitHub 常见写法,一般不用额外折腾。真要改配置,用 marked.use:
import { marked } from 'marked';
marked.use({ gfm: true, breaks: true, async: false});
const html = marked.parse('第一行\n第二行');
想改输出长什么样也行
比如不想让所有一级标题都长一个样,可以改 renderer:
import { marked } from 'marked';
const renderer = { heading({ text, depth }) { if (depth === 1) { return `${text}\n`; } return false; }};
marked.use({ renderer });
console.log(marked.parse('# 我的博客标题'));
代码高亮、脚注、emoji 这些,官方生态里也有现成扩展,比如 marked-highlight、marked-emoji。装上以后同样丢给 marked.use() 就行,不用自己从零造轮子。
项目地址在这:https://github.com/markedjs/marked
最近锋哥录制了一些AI编程视频教程
高清视频+源码+领取。
扫描下方公众号【小锋学AI 】回复:888
,
可获取下载链接
👇👇👇