大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 Turndown
许多项目并非一开始就拥有明确的内容组织形式,但随着时间的推移会不断变化,例如:一个博客最初可能使用 HTML 格式存储在数据库中,但后来有人可能因为 Markdown 的简洁性而想要使用。

在这种情况下,就需要将内容从一种格式转换为另一种格式。如果使用 JavaScript (Node.js) 进行服务器端逻辑转换或者直接在浏览器中使用编辑器将 HTML 转换为 Markdown,那么可以使用 Turndown 库轻松完成这项任务。Turndown 是一个用 JavaScript 编写的 HTML 到 Markdown 转换器。
Convert HTML into Markdown with JavaScript.Turndown 目前在 Github 通过 MIT 协议开源,有超过 10.6k 的 star、1k 的 fork、65k 的项目依赖量,是一个妥妥的前端优质开源项目。
如何使用 Turndown
npm install turndown// 或者[xss_clean][xss_clean]对于与 RequireJS 配合使用的情况,UMD 版本位于 lib/turndown.umd.js(适用于 Node.js)和 lib/turndown.browser.umd.js(适用于浏览器),这些文件会在发布 npm 包时自动生成。
// For Node.jsvar TurndownService = require("turndown");var turndownService = new TurndownService();var markdown = turndownService.turndown("Hello world!
");Turndown 也接受 DOM 节点作为输入,例如:元素节点、文档节点或文档片段节点:
var markdown = turndownService.turndown(document.getElementById("content"));Turndown 还支持众多高级方法,用于配置自定义转换行为,例如 addRule(key, rule):
// key参数是规则的唯一名称,以便于引用turndownService.addRule("strikethrough", { filter: ["del", "s", "strike"], replacement: function (content) { return "~" + content + "~"; },});使用 keep(filter)还能自定义保留行为:
turndownService.keep(["del", "ins"]);turndownService.turndown("Hello worldWorld
"); // 'Hello worldWorld'在上面转换示例中, 和 元素将呈现为 HTML。开发者甚至还可以使用 use(plugin|array)自定义插件:
// Import plugins from turndown-plugin-gfmvar turndownPluginGfm = require("turndown-plugin-gfm");var gfm = turndownPluginGfm.gfm;var tables = turndownPluginGfm.tables;var strikethrough = turndownPluginGfm.strikethrough;// Use the gfm pluginturndownService.use(gfm);// Use the table and strikethrough plugins onlyturndownService.use([tables, strikethrough]);更多关于 Turndown 的用法和示例可以参考文末资料,本文不再过多展开。
参考资料
https://github.com/mixmark-io/turndown
https://ourcodeworld.com/articles/read/707/how-to-convert-html-to-markdown-with-javascript-using-turndown
https://www.capturekit.dev/blog/how-to-convert-html-to-markdown