惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
小众软件
小众软件
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验
Markdown 编辑器的实现
Surmon · 2017-02-14 · via Surmon.me

博客后台需要快速实现一个定制版的 Markdown 编辑器,同时避免重复造无意义的轮子。

之前用的 ng2-quill-editor ,WYSIWYG编辑器,不爽,很不爽。

还是 Markdown 最亲切,无论可移植性,易用性,友好程度都太美好。

怎么实现?

简单说:

编辑器 + 解释器

解释器大把的,选了 marked ,10K+ star,用户也多,插件机制成熟。

        
        

123

var marked = require('marked'); console.log(marked('I am using __markdown__.')); // Outputs: <p>I am using <strong>markdown</strong>.</p>

编辑器,简单说一个 <textarea></textarea> 就够了,但我要美观,要能识别代码高亮,要能折叠,要能支持多种编程语言,总之我啥都要,这就不简单了,只能找第三方了; 然而还真的没一个如意的,大部分的项目都是迎合自身需求产出的,缺乏太多定制型,不灵活,不了解别人代码,不易优化。

无奈造了个简单的,简单到除了上面我列出的几个功能之外啥功能都没有,整挺好。

OK, 全部代码在这

不详说,讲几个核心:

  • Codemirror 中使用 "gmf" mode,而非 "markdown" mode,GFM 是 GitHub 拓展的基于 Markdown 的一种纯文本的书写格式。
  • 需要啥语言就引入啥包,自己用的,不必在意体积,功能才是第一位
  • 要实现实时预览模式,简单说就是双向绑定,编辑器的数据流直接到 marked 解析输出
  • 要添加什么按钮功能,比如 Link 这样的,直接调 Codemirror 的 API,很丰富很强壮
  • 代码高亮和代码块折叠之一类功能,require 进对应文件,Codemirror 配置好就 ok 了

效果如下: