百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

任由文字肆意流淌,更自由的开源 Markdown 编辑器

liuian 2025-05-10 23:17 69 浏览

对于创作平台来说内容编辑器是十分重要的功能,强大的编辑器可以让创作者专注于创作“笔”下生花。而最好取悦程序员创作者的方法之一就是支持 Markdown 写作,因为大多数程序员都是用 Markdown 来写文章。

Markdown 作为程序员写作的心头爱,有很多优点:

  • 通过语法实现排版,不需要点选手动设置样式
  • 快速实现复杂内容,如:代码块、超链接、公式等
  • 让创作者有更多时间专注于内容

但,同样的也有些缺点:

  • 有一定的学习门槛,对于非程序员不太友好
  • 看原文档就像看“代码”,预览效果需要工具或编辑器支持

那有没有能够即保留 Markdown 带来的便利,同时又降低门槛的办法呢?大多数老玩家会脱口而出:Typora

Typora 直接使用完全没有问题,但由于它没有开源。如果想在自己的项目实现类似的 Markdown 编辑器,就需要另寻方案了。

如果你正在寻找功能强大、易于接入、所见即所得的 Markdown 编辑器、组件、插件,就请花 5 分钟读完本文!

接下来 HelloGitHub 带来的开源项目完全满足上述需求。Milkdown 一款高颜值+自由(插件)的所见即所得,集合 Markdown 编辑器、组件、插件于一身的开源项目。

https://github.com/Saul-Mirone/milkdown

你想要的功能它都有,不要的功能也可以通过删减插件,减少体积。插件的设计思想+完善的中文文档,让你分分钟定制出最适合自己的 Markdown 编辑器!

下面跟着项目作者一起来感受 Milkdown 的魅力吧。

一、上手

下面提供了 2 种方式,可直接体验:

在线尝试:https://milkdown.dev/#/online-demo

VS Code 插件:https://marketplace.visualstudio.com/items?itemName=mirone.milkdown

1.1 功能展示

方便的编写表格:

直接粘贴和复制 Markdown 文本:

甚至协同编辑:

双栏 Markdown 编辑器很常见。但 双向绑定 的 Markdown 编辑器,目前仅此一家:

功能方面就介绍这么多,下面用 Milkdown 轻松实现个编辑器。

1.2 第一个编辑器

Milkdown 的核心以及各种插件都是独立的 NPM 包,可以直接通过 NPM 来进行安装。

npm i @milkdown/core @milkdown/preset-commonmark @milkdown/theme-nord

上手也十分简单:

import { Editor } from '@milkdown/core';
import { nord } from '@milkdown/theme-nord';
import { commonmark } from '@milkdown/preset-commonmark';

Editor
  .make()
  .use(nord)
  .use(commonmark)
  .create();

我们先使用 make 来初始化编辑器,然后使用 use 来加载插件,最后使用 create 来创建编辑器。

1.3 丰富的插件

插件是 Milkdown 的核心,它本质上就是一个插件加载器,一切功能都是通过插件来提供的。表格是一个插件、主题是一个插件、甚至一行简单的文本也是一个插件。

目前官方已经提供了许多插件,确保可以开箱即用。下面仅列举了部分插件:

也可以自己动手编写插件,更多详情

二、技术栈

Milkdown 基于下面的工具实现:

  • Prosemirror:一个用于在 web 端构建富文本编辑器的工具包
  • Remark:正确的 Markdown 解析器
  • TypeScript:以 TypeScript 编写
  • Emotion:用于构建样式的强大的 css in js 工具
  • Prism:代码块支持
  • Katex:高性能的渲染数学公式

富文本编辑器本身是一个天坑。虽然 ContentEditable 看起来很美好,但实际用起来就会发现问题层出不穷。因此我们基于 Prosemirror 来实现富文本编辑器。因为它足够成熟、久经工业的锤炼,并且拥有良好的架构和 API 设计。

三、架构

Prosemirror 的核心逻辑其实类似于 React,它通过一种函数式的数据映射来体现编辑器的 UI 和内部状态的关系,如图:

编辑器通过 EditorState 来保存当前状态,并由 EditorState 产生出 EditorView,即 UI 视图。 用户在 UI 视图上进行的操作最终会产生 DOM event,例如:input 事件、click 事件。DOM event 事件会产生 Transaction,代表了对 State 的修改,类似于 Redux 或 Vuex 中的 Action。 这些 Transaction 会与原来的 EditorState 进行计算,产生新的 EditorState,如此循环。

Prosemirror 通过这样的方式将编辑器中的每个状态以 EditorState 的方式保存了下来,它是一颗树状结构。而有一点编译原理基础的朋友都知道,任何编程语言都有对应的 AST(抽象语法树)。因此我们需要的就是建立 Prosemirror 中的 EditorState 与 Markdown 的抽象语法树之间的联系。 Remark 完美契合我们的需求,因为它有设计良好的 AST,并且易于扩展自己的语法。

这样一来 Milkdown 的架构也逐渐清晰:

Markdown <-> Remark AST <-> Prosemirror State <-> UI

四、结语

在开始这个项目前,我尝试过各种各样的 Markdown 编辑器,但没有找到一款特别满意的。因为它们都是闭源,而且功能由开发商提供,有的功能太过于臃肿、有的又太过简单。 既然这样,我索性自己做一款能够轻松定制功能,非程序员也能轻松使用的 Markdown 编辑器,也就有了大家看到的 Milkdown。

希望开源的 Milkdown 让用户有更自由的选择,打破 Markdown 编辑器的“垄断”。开源不易如果 Milkdown 对您有帮助,也请给个 Star。

最后,感谢 HelloGithub 的支持和帮助。Milkdown 先是有幸入选了 第 65 期 月刊,然后受邀合作了这篇文章,让更多人知道我的开源项目。

相关推荐

fast路由器地址(fast路由器ip地址)

fast路由器的登录地址(管理页面地址)是falogin.cn,电脑、手机连接到fast路由器的网络后,在浏览器中输入falogin.cn,就可以进入到fast路由器的登录页面。在登录页面中,输入正确...

电脑进不去桌面怎么重新安装系统

把一个系统放到桌面的方法方法1在桌面上空白处单击鼠标右键,在弹出的快捷菜单中选择【个性化】菜单命令2弹出【个性化】窗口3选择【更改桌面图标】链接4弹出【桌面图标设置】对话框5选择要添加的桌面图标,在复...

cad2008下载免费中文版破解版

1还可以。不是很难用。2比较用的多的是CAD2007和CAD2004。但实际上CAD2008也是好用的。这是大家用的少。3 CAD哪个版本比较好?其实主要看周围的人用什么版本。一般人选...

windows键的功能(windows键有什么用)
windows键的功能(windows键有什么用)

windows键上有一个微软Windows样式的图标,Win键处于电脑键盘的左下角,处于Ctrl键与Alt键中间的那个带着微软的徽标键就是Win键,该按键属于辅助按键,主要与其它按键组合使用,实现一些特定的功能,配合Win键可以和其他按键组...

2025-12-26 10:55 liuian

一键恢复照片免费(一键恢复照片免费版app)
一键恢复照片免费(一键恢复照片免费版app)

如何一键还原涂鸦图片?1、涂鸦的作用就是为破坏其背后图像的细节,利用ps软件里面的修复画笔工具、修补工具和仿制图章工具,根据不同污点大小选择不同工具,可以还原部分图片。2、对于涂鸦严重的照片是无法还原,利用美图秀秀还原涂鸦图片,如果是涂鸦后...

2025-12-26 10:05 liuian

快捷方式小箭头怎么去除(快捷方式小箭头怎么去除图标)

要去除Windows桌面快捷方式的小箭头,可以按照以下步骤操作:针对Windows7、8、10系统:1.**通过注册表编辑器去除**:  -按`Win+R`键打开“...

qq网页版登录后怎么聊天(qq聊天网页版电脑登录)

两种方法:1对方知道的情况下:让对方把她的Tencent\QQ\(QQ号码)\Msgex.db文件发送给你,你先用对方的qq登陆一次,然后替换调Tencent\QQ\(QQ号码)\Msgex.db文...

免费全局主题商店(主题商店的全局主题是什么意思)

vivo手机下载免费全局主题方法:进入手机自带的i主题-主题中的搜索框输入“免费”,在主题中找到免费的全局主题下载应用即可。具体操作步骤(以vivoX20为例):1、待机桌面进入i主题2、主题...

怎么取消电脑自动更新(怎么取消电脑自动更新win10)

如果您想临时关闭Windows计算机的自动更新功能,可以按照以下步骤操作:1.打开“设置”应用程序。您可以点击Windows菜单并选择“设置”选项,或者使用Win+I快捷键打开“设置...

如何安装cad2014(如何安装监控摄像头视频教程)

安装AutoCAD2014的步骤如下:解压软件安装包。自动弹出安装面板,点击安装。选择“我接收”,点击下一步。提供三组序列号666-69696969、667-98989898、400-4545454...

惠普1020打印机怎么连接电脑

1,先安装好打印机,将打印机的连接线接到电脑上,打开打印机电源。2,打开电脑,然后使用随机的打印机驱动程序或者到打印机的官网下载当前系统的驱动程序,然后点击安装。3,安装完成后,点击打印测试页,如...

win7打印机共享需要密码(win7共享打印机需要输入用户名和密码怎么办)

第一步:我们打开打印机文件夹,然后在打印机的图标上面点击鼠标右键,在弹出的对话框里面选择共享选项。如果没有这个选项,我们就需要在文件夹里面找到文件夹选项,在弹出的对话框理面找到选择简单文件共享,然后...

windows7是什么样的(windows7是什么型号)

1.Windows7驱动器是一种用于安装和管理硬件设备的软件程序。2.Windows7驱动器的作用是使计算机能够与各种硬件设备进行通信和交互。它通过提供必要的指令和接口,使硬件设备能够被操作系...

电脑序列号查询方法(电脑序列号查询方法是什么)
电脑序列号查询方法(电脑序列号查询方法是什么)

系统win71打开电脑,找到计算机图标,单击鼠标右键,出现菜单后,点击属性2进去页面,找到产品id,产品id右侧就是Windows序列号了方法/步骤1/3分步阅读快捷键win+r打开运行菜单,输入regedit,点击确定。2/3打开注册表,...

2025-12-26 05:55 liuian

摄像头软件app有哪些(摄像头软件叫什么名字)

和家亲监控摄像头好用,这是中国移动推出的一款智能设备管理app,其功能十分强大,不仅可以链接多个智慧设备,帮助用户在手机上管理智能家居,而且还可以在调整观看的视角,画质等等,以及支持回放和储存等等功能...