为什么我从零重写我的邮件编辑器:从块到原子重写

发布: (2026年2月17日 GMT+8 00:08)
5 分钟阅读
原文: Dev.to

Source: Dev.to

封面图片:为何我从头重写我的邮件编辑器:从块到原子重写

Introduction

嗨,大家好!

六年前,我推出了 MySigMail Card 作为商业产品。说实话,它并没有像我预期的那样起飞。我很难吸引足够的用户来维持其可持续性。最终,我失去了动力,放弃了它,转而专注于我的另一个开源项目 massCode

多年来,这个项目一直积灰。但除了营销上的困难,它的核心架构里还埋着一个 定时炸弹——它完全基于 预设(Presets) 构建。

The Problem: The “Preset Trap”

在最初的版本中,如果用户想要一个标题,他们会拖拽一个 “Header Block”。如果想要推荐语,则拖拽一个 “Testimonial Block”。在底层,这些都是硬编码的 HTML 片段,结构非常僵硬。

这导致了多种 开发噩梦

  • 变体爆炸:想把图片放在右侧?我必须写一个新块。想要三列而不是两列?再写一个块。
  • 维护上限:我成了瓶颈。用户请求的每一个 “小改动” 都需要我推送代码更新。
  • 刚性数据结构:JSON 与视觉表现耦合,迁移时头疼不已。

The Solution: Embracing Atomic Design

我意识到,要让编辑器真正强大,必须把 布局(Layout)内容(Content) 解耦。于是我抛弃了旧引擎,使用递归的层级系统重新构建:

  • Block(根节点):顶层区块包装器,负责全宽背景和垂直间距。
  • Row(网格):定义水平结构,管理列间距和移动端折叠逻辑。
  • Cell(灵活容器):控制对齐、尺寸,且 可以包含嵌套的 Row,从而实现复杂的多层网格结构。
  • Atom(内容):实际的元素:Text、Image、Button、Menu、Divider

这种递归结构 (Block → Row → Cell → Row …) 意味着你不再局限于简单的列布局。你可以构建诸如 “侧边栏 + 主内容” 或复杂的产品网格,而无需写一行代码。

The Tech Stack

我希望这个版本现代、快速且对开发者友好:

  • Vue 3(Composition API):响应式、模块化的 UI。
  • TypeScript:强大的数据模式,对复杂的邮件结构至关重要。
  • Tailwind CSS:使用最新的 v4,提供极速的样式。
  • Shadcn Vue:可访问的 UI 组件。
  • Clean Email Output:生成可在 Outlook 中真正工作的生产级表格 HTML。

Why Open Source?

我正在以开源项目的形式公开构建(AGPL‑3.0)。

为什么?首先,我相信世界需要一个强大、可嵌入的邮件构建器,而不是被 每月 500 美元的 SaaS 订阅 锁住。

还有更深层的原因。我们正处在供应商锁定和中心化控制日益加剧的时代。由于地缘政治原因,整个地区可能被切断服务,导致开发者和用户陷入困境。软件应当跨越国界,保持可访问和可靠。

出于对开源的热情,我想提供一个真正独立的替代方案,让每个人都能使用强大且自托管的邮件编辑器。

Get Involved

如果你曾为僵硬的邮件模板苦恼,或想了解我们在 Vue 3 中如何处理复杂的拖拽功能,欢迎查看仓库:

👉 github.com/mysigmail/card

我正在积极寻找对架构的反馈,欢迎任何人贡献代码!

0 浏览
Back to Blog

相关文章

阅读更多 »