EmDash 能真正取代 WordPress 吗?
EmDash能取代WordPress吗?比较插件安全、托管、迁移和取舍,了解哪些内容网站适合迁移,以及WordPress仍具优势的方面。
对于以内容为主、插件需求不多、且团队熟悉 Astro 开发的网站,EmDash 现在就可以取代 WordPress。但如果网站依赖 PHP 主题、特定的 WordPress 插件或付费扩展,EmDash 目前还无法做到开箱即用、直接替换。
每一位曾因插件漏洞导致 WordPress 网站被入侵的客户,都问过同一个问题:有没有更安全的选择?EmDash 发布 1.0 版本时打出了“WordPress 的精神继承者”(spiritual successor to WordPress)这一口号,于是许多建站服务商又开始重新思考这个问题。
本文从四个方面对比 EmDash 与 WordPress:插件安全模型、托管要求、迁移方式,以及你需要做出的取舍。
核心要点
- EmDash 1.0 是一款基于 Astro 构建、采用 MIT 许可证的 CMS。Cloudflare 于 2026 年 9 月 28 日发布了该版本,它可以运行在 Cloudflare Workers 或任意 Node.js 服务器上。
- EmDash 的沙箱插件在初始状态下只能访问自己的私有存储。只有在声明所需权限并经管理员批准后,插件才能访问内容、媒体、用户或网络。
- 在 Cloudflare 上,沙箱插件需要 Workers 付费套餐(Workers Paid)和 Worker Loader 绑定。在 Node.js 上,沙箱插件运行在 workerd 子进程中,且只受挂钟时间(wall-time)限制。
- 导入工具可以通过 WXR 文件或 EmDash Exporter 插件迁移 WordPress 内容。PHP 主题和插件无法迁移,必须重新构建。
什么是 EmDash CMS?
EmDash 是一款基于 Astro 构建的开源 TypeScript CMS。它采用 MIT 许可证,可运行在 Cloudflare 或 Node.js 服务器上。Cloudflare 发布 EmDash 1.0 的公告称其为一款稳定、免费、开源的 CMS,“已可用于支撑生产环境网站”。
不同角色各有各的使用方式:开发者使用 Astro 编写网站;编辑人员在 EmDash 管理后台中工作;AI 智能体则可以通过 API、CLI 或内置的 Model Context Protocol(MCP)服务器读取和修改内容。可以使用以下命令搭建新站点:
npm create emdash@latest
Cloudflare 表示,早在 1.0 版本发布之前的 8 月,它就已经将自己的博客迁移到了 EmDash。
EmDash 的插件模型与 WordPress 有何不同?
插件模型是两个系统之间最大的区别。在 WordPress 中,所有插件都与网站运行在同一个 PHP 进程中,可以访问数据库、文件系统和网络。而 EmDash 的沙箱插件从一开始就处于隔离状态,所需的每一项能力都必须单独申请。
根据 Cloudflare 关于 EmDash 1.0 的文章,沙箱插件只能获得自己的私有存储,除此之外别无其他。网站的内容、媒体、用户、密钥、环境变量、文件系统和网络默认都对其关闭。插件若要获取更多权限,必须先声明需求,再由网站管理员批准,这与移动应用的权限机制非常相似。Cloudflare 举了一个图片优化插件的例子:它会申请读取和管理媒体的权限,但无法读取用户内容。
EmDash 的插件注册中心采用去中心化架构。它基于 AT Protocol 构建,发布者在自己的 Atmosphere 账户中签名并存储自己的软件包和版本记录。即使 EmDash 目录通过审核机制隐藏了某个插件条目,发布者仍然拥有该插件及其版本历史。
沙箱机制有一个例外。根据配置参考文档,plugins 数组用于声明与 Astro 站点共享同一进程的插件,原生插件就放在这里。这些插件在运行时不受隔离。而从注册中心安装的插件则始终运行在沙箱中。
EmDash 应该托管在 Cloudflare 还是 Node.js 上?
EmDash 可以托管在 Cloudflare 或 Node.js 上,但两者的沙箱工作方式不同。Cloudflare 需要付费,但施加的限制更多;Node.js 运行器无需额外费用,但施加的限制更少。
| Cloudflare Workers | Node.js | |
|---|---|---|
| 要求 | Workers 付费套餐、名为 LOADER 的 worker_loaders 绑定、PluginBridge 导出 | workerd 软件包 |
| 插件数据库 | D1 绑定 DB,与站点配置的数据库适配器相互独立 | 站点配置的数据库 |
| 强制限制 | CPU 时间、子请求、挂钟时间 | 仅挂钟时间 |
插件沙箱文档详细列出了这些要求。如果没有运行器,EmDash 会跳过 sandboxed: [] 下列出的所有插件。你仍然可以浏览自行配置的注册中心,但安装或更新沙箱插件时会因 SANDBOX_NOT_AVAILABLE 错误而中止,网站的其余部分则不受影响。
在 Node.js 上,需要先安装 Node 适配器和沙箱运行器,然后在配置中指向该运行器:
npm install @astrojs/node @emdash-cms/sandbox-workerd workerd
// astro.config.mjs
import { defineConfig } from "astro/config";
import node from "@astrojs/node";
import emdash from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
output: "server",
adapter: node({ mode: "standalone" }),
integrations: [
emdash({
database: sqlite({ url: "file:./data/emdash.db" }),
sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",
}),
],
});
能力(capabilities)文档确认,Node.js 运行器只强制执行 30 秒的挂钟时间限制。如果站点设置了 CPU、内存或子请求限制,运行器会记录一条警告,因为独立运行的 workerd 无法应用这些限制。在 Node.js 上,CPU 占用过高的插件只有在达到挂钟时间上限时才会被终止。
如何从 WordPress 迁移到 EmDash?
EmDash 迁移的是内容,而不是代码。内容导入文档列出了两种导入方式:使用 WordPress eXtended RSS(WXR)文件,或连接到已安装 EmDash Exporter 插件的站点。WordPress.com 没有单独的导入源,因此这类站点同样需要使用 WXR 导出文件或 EmDash Exporter。
| 内容 | 状态 |
|---|---|
| 文章、页面、自定义文章类型、分类法、可复用区块、作者 | 通过 WXR 导入 |
| 媒体 | 可导入,但 WXR 仅包含 URL。复制文件期间 WordPress 站点必须保持在线 |
| 评论、菜单、Logo、网站图标(favicon) | 仅 Exporter 1.2.0 或更高版本支持 |
| PHP 主题和插件 | 无法迁移 |
| 插件自有字段 | 不会从 WXR 中复制。Exporter 可将自定义元数据和 ACF 值复制到匹配的字段中 |
WordPress 迁移指南提醒,1.2.0 之前版本的 Exporter 会在不做任何提示的情况下丢弃评论、菜单、Logo 和网站图标。导入过程仍会正常完成,且不会列出任何缺失项。因此,开始迁移前务必检查 Exporter 的版本。至于主题和插件,EmDash README 表示,智能体技能(agent skills)可以协助移植插件和主题。但即便有这些辅助手段,也要做好重新构建的准备。
WordPress 仍有哪些优势?
WordPress 依然保有四项实际优势:主题和插件生态规模远超对手、几乎所有托管服务商都支持它、编辑人员早已熟悉它,而且拥有成熟的付费插件市场。在 1.0 发布时,Cloudflare 表示 EmDash 注册中心目前只支持免费插件,付费插件计划在后续推出。
托管是第二个差距。WordPress 几乎可以运行在任何 PHP 主机上,而 EmDash 完整的插件沙箱则需要付费的 Cloudflare 套餐,或者自行运维的 Node.js 服务器。
第三项成本来自编辑人员。EmDash 的管理后台对他们来说是全新的,因此为客户迁移网站不仅意味着迁移内容,还意味着要重新培训员工。如果你正在权衡多种 WordPress 替代方案,可以参考 11ty 与 WordPress 的对比,了解这些取舍在静态优先方案中是如何体现的。
谁应该现在尝试 EmDash,谁应该再等等
以下情况可以现在尝试:
- 你构建的是内容型网站,例如博客、文档或营销页面,并且团队已经在使用 Astro。
- 插件供应链风险是你或你的客户切实关心的问题。
- 你希望让智能体通过 API、CLI 或 MCP 服务器处理内容。
以下情况建议再等等:
- 网站依赖某个特定的 WordPress 插件、商业主题或类似 WooCommerce 的功能。
- 你需要使用注册中心中的付费插件。
- 你的托管方案必须是廉价的 PHP 共享主机。
如果你计划部署在 Cloudflare 上,可以了解一下 cf,这是 Cloudflare 新推出的 CLI,已于 2026 年 9 月 28 日进入公开测试阶段。它通过 cloudflare.config.ts 文件管理 Workers 配置和绑定,而使用 wrangler.jsonc 配置的项目仍由 Wrangler 处理。
对于特定类型的网站,EmDash 确实是 WordPress 的真正替代品:以内容为主、插件需求少、由熟悉 Astro 的团队构建,并且相比生态规模更看重插件沙箱。对于其他类型的网站,EmDash 值得试点,但尚不适合全面切换。一个不错的下一步是:选取一个真实客户站点,将其 WXR 导出文件通过导入工具跑一遍,并列出缺失的内容。
常见问题
EmDash 能仅凭网址导入 WordPress 站点吗?
不能。如果没有安装 EmDash Exporter 插件,EmDash 只能通过站点网址检查公开的 WordPress REST API。这一检查可以确认该站点是否运行 WordPress,并统计其公开的文章、页面和媒体数量,但无法导入任何内容。要进行导入,需要上传 WXR 导出文件,或在 WordPress 站点上安装 EmDash Exporter 并使用 WordPress 应用密码进行连接,这种方式还能访问公开 REST API 未暴露的内容。
导入 EmDash 时,Gutenberg 区块和插件区块会怎样处理?
EmDash 会将 Gutenberg 标记转换为 Portable Text,经典编辑器的 HTML 也通过同一个转换器处理。对于由 WordPress 在服务器端渲染的区块,例如“最新文章”区块或许多插件区块,文章中并不存储其标记。导入工具会将这类区块保留为仅包含原始区块注释的 HTML 区块,它在网站上不会显示任何内容,因此你需要重新构建或删除它们。可复用区块会转换为 EmDash 的 sections。
WordPress 中的草稿、定时发布和私密文章在 EmDash 中会保留原有状态吗?
只有已发布的文章会保持发布状态。EmDash 导入工具会将 WordPress 的 publish 状态映射为已发布,而 draft、pending、private、future、trash 以及未知状态都会转为草稿。因此,定时发布和私密文章在导入后需要人工复核。EmDash 迁移指南还建议,在切换 DNS 或下线 WordPress 站点之前,按状态统计条目数量,并确认未登录的访客无法看到草稿。
EmDash 支持哪些数据库和存储后端?
EmDash 使用 Kysely 处理 SQL,使用 S3 API 处理存储,因此数据层支持 SQLite、Cloudflare D1、Turso 或 libSQL 以及 PostgreSQL,媒体存储则支持 Cloudflare R2、AWS S3、任何兼容 S3 的服务或本地文件系统。在 Cloudflare 上,无论站点本身使用哪种数据库适配器,沙箱插件仍通过名为 DB 的 D1 绑定进行读写。
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.
Star on GitHub12k