【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器 -火狐体育

  • 2,202 views
  • 阅读模式
【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

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

但,同样的也有些缺点:

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

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

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

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

一、上手

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

在线尝试、vs code 插件

1.1 功能展示

方便的编写表格:

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

直接粘贴和复制 markdown 文本:

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

甚至协同编辑:

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

1.2 第一个编辑器

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

1.3 丰富的插件

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

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

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

二、技术栈

milkdown 基于下面的工具实现:

  • prosemirror:一个用于在 web 端构建富器的工具包
  • remark:正确的 markdown 解析器
  • typescript:以 typescript 编写
  • emotion:用于构建样式的强大的 css in js 工具
  • prism:代码块支持
  • katex:高性能的渲染数学公式

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

三、架构

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

【转hellogithub】milkdown:任由文字肆意流淌,更自由的开源 markdown 编辑器

编辑器通过 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 期 月刊,然后受邀合作了这篇文章,让更多人知道我的开源项目。


原文转自:hellogithub

原标题:

weinxin
扫码关注微信公众号--it老五
微信扫一扫关注公众号,获取更多实用app,订阅地址不定时更新
  • 火狐体育的版权声明 本文源自 , 整理 发表于 2021-09-23 23:05:08
  • 转载请务必保留本文链接:https://itlao5.com/6692.html
评论  0  访客  0

发表评论

匿名网友 填写信息


确定