找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3024

积分

0

好友

401

主题
发表于 2 小时前 | 查看: 1| 回复: 0

发布仅 5 天,便狂揽 7500 颗 Star。这样的增长速度,在 CMS(内容管理系统)领域实属罕见。

项目名为 EmDash,其作者 Matt Kane 是 Astro 的核心维护者,目前任职于 Cloudflare。用大白话来解释他的目标,就是把 WordPress 的核心理念,用 2026 年的现代技术栈重新实现一遍。起初我也以为这不过是又一个换皮的 Headless CMS,但看了一眼其插件沙箱的实现方式后,便决定认真读完。

项目卡片

EmDash — 全栈 TypeScript CMS
GitHub: github.com/emdash-cms/emdash
Star: 7.5k
Fork: 539
许可证: MIT
一句话判断:WordPress 的 serverless 重做版,用 Worker 沙箱解决插件安全问题,但目前是 beta,不适合生产。

WordPress 的真正问题不是 PHP

很多人吐槽 WordPress 慢、不安全。这些都没错,但 Matt Kane 在 README 中指出的问题更为具体:Patchstack 的报告显示,96% 的 WordPress 安全漏洞来自插件

根源很直接——WordPress 插件拥有对数据库、文件系统、用户数据的完整访问权限。一个有漏洞的插件就能拖垮整个站点。审查代码可以降低风险,但在不设限的架构面前,审查永远追不上插件增长的数量。

EmDash 的解法是使用 Cloudflare 的 Dynamic Worker Loaders 构建插件沙箱。每个插件必须声明自己需要的能力(capabilities):

export default () =>
  definePlugin({
    id: "notify-on-publish",
    capabilities: ["read:content", "email:send"],
    hooks: {
      "content:afterSave": async (event, ctx) => {
        if (event.content.status !== "published") return;
        await ctx.email.send({
          to: "editors@example.com",
          subject: `New post: ${event.content.title}`,
        });
      },
    },
  });

上面这个插件只请求了 read:contentemail:send 两种能力,因此它就只能做这两件事。它无法直接接触数据库,也读取不了用户信息。这种架构层面的能力限制,比逐行审查插件代码要可靠得多。

当然,代价是有的:Dynamic Workers 目前只对 Cloudflare 的付费账户开放,最低 5 美元/月。

不是代码优先,而是数据库优先

大多数 Headless CMS 的 Schema 定义方式是在代码中写配置文件,修改后需要重新部署。EmDash 走了另一条路——Schema 直接存在数据库里

内容类型可以在管理后台直接创建和修改,每种类型对应一张真实的 SQL 表(例如 ec_postsec_products),并拥有类型化的列。开发者可以从“活的” Schema 中直接生成 TypeScript 类型:

npx emdash types

前端则通过 Astro 的 Live Collections 查询内容,无需额外的 API 层,也不需要触发构建:

---
import { getEmDashCollection } from "emdash";
const { entries: posts } = await getEmDashCollection("posts");
---

{posts.map((post) => <article>{post.data.title}</article>)}

这意味着非技术人员可以在后台修改 Schema,而开发者的代码逻辑不会因此中断。

EmDash 内置了三个模板——博客(Blog)、营销(Marketing)、作品集(Portfolio),均支持浅色/深色模式。其中博客模板包含了分类、标签、全文搜索、RSS 等完整功能:

EmDash Blog 模板首页截图,展示其现代简洁的设计与完整的博客功能

富文本不再依赖 HTML

WordPress 将富文本内容存储为 HTML,元数据则塞在 HTML 注释里。这种做法的后果是内容被死死绑定在特定的 DOM 结构上,未来想更换前端框架进行渲染,难度堪比“拆炸弹”。

EmDash 采用了 Portable Text(由 Sanity 团队提出的规范),这是一种结构化的 JSON 格式。同样的内容可以轻松渲染成网页、邮件或 API 响应,无需解析杂乱的 HTML。项目仓库里甚至提供了一个 gutenberg-to-portable-text 包,专门用于将 WordPress 的块(Gutenberg)转换为 Portable Text,方便迁移时直接使用。

为 AI Agent 设计

EmDash 内置了 MCP(Model Context Protocol)服务器,这意味着像 Claude、ChatGPT 这类 AI 工具可以直接连接并操作站点内容。仓库里还包含了 7 个技能(skill)文件,用于教 AI Agent 如何编写插件、迁移 WordPress 主题和插件,以及如何使用 CLI 管理内容。

其 CLI 工具本身提供了 em 命令(emdash 的别名),并支持 --json 输出格式,天然适合被其他程序或脚本调用。在 packages/x402 目录中,甚至能找到基于 HTTP 402 协议的支付中间件——这些为未来 AI 生态准备的基础设施,项目在第一天就已经考虑进去了。

多平台支持,但核心体验绑定 Cloudflare

EmDash 的存储层做了抽象:使用 Kysely 处理 SQL,用 S3 API 兼容的接口处理文件存储。这使你可以在一定程度上选择技术栈,比如使用 D1、SQLite、Turso、PostgreSQL 作为数据库,使用 R2 或 S3 作为文件存储。

然而,最完整、最核心的体验依然在 Cloudflare 平台上,尤其是插件的沙箱隔离特性。在其他平台上运行插件,只能使用“安全模式”(safe mode)——这相当于进程内执行,失去了真正的边界隔离。虽然通常我对“官方强推某个平台”的项目持保留态度,但鉴于插件安全是 EmDash 的核心卖点,在非 Cloudflare 环境下,这个卖点无疑会大打折扣。

当前状态与潜在风险

在决定是否采用之前,有几个关键点需要注意:

  • 版本号为 0.1.0 beta。 截至分析时,项目仅有 94 个提交,17 位贡献者,其中主作者 Matt Kane 贡献了 70 个。项目创建于 4 月 1 日。用它搭建个人博客尝鲜可以,但投入生产环境还需等待。
  • 插件生态尚未成型。 官方提供了表单、嵌入、SEO、审计日志、AI 内容审核等十来个插件,但第三方插件市场仍是空白。相比 WordPress 超过六万的插件数量,EmDash 的市场功能(packages/marketplace)本身也还在建设中。
  • 与 Astro 强绑定。 EmDash 并非一个通用的 Headless CMS,而是 Astro 的原生集成方案。如果你使用的不是 Astro 框架,那么 EmDash 目前无法为你提供帮助。这既是其优势(与前端框架深度整合,开发体验流畅),也是其最大的限制。
  • Dynamic Workers 的付费门槛。 插件沙箱是 EmDash 最核心的差异化特性,但它依赖于 Cloudflare 的付费账户。免费方案虽然可以运行 EmDash 核心功能,但需要注释掉 worker_loaders 配置,这意味着你放弃了其最重要的安全特性。

谁应该关注 EmDash?

总体来说,三类开发者可能会对这个项目产生浓厚兴趣:

  1. 正在使用 Astro 建站,同时又受够了 WordPress 复杂度和历史包袱的人——EmDash 值得一试。
  2. 希望从 WordPress 迁移出来,但仍然需要强大管理后台和可扩展插件能力的人——需要注意的是,虽然 WordPress 导入工具已可用,但生态差距巨大,需做好“没有现成插件可用”的心理准备。
  3. 对 Serverless 架构和插件安全设计本身感兴趣的开发者——即使你不用 EmDash,其基于 Worker 沙箱的设计思路也极具研究价值。

如果你也想快速体验,可以使用以下命令创建一个新项目:

npm create emdash@latest

如果不想配置 Cloudflare 环境,项目仓库里也提供了本地 Demo(基于 Node.js + SQLite),可以直接运行体验。

关于现代开发工具与架构的讨论,一直是 开发者广场 中的热门话题。如果你对这类 GitHub 上的前沿开源项目感兴趣,不妨来云栈社区逛逛,这里汇聚了众多乐于分享和探讨的开发者。




上一篇:Google AI Edge Gallery:在Android/iOS手机离线体验Gemma 4大模型实测
下一篇:Spring WebClient 动态创建引发 JVM 内存泄漏:排查与修复实录
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-9 06:57 , Processed in 0.732389 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表