为什么 React 至今没有自己的 WordPress——以及我们为什么做了 ReactPress 4.0

如果你是一名前端工程师,大概率经历过这样的循环:
- 团队决定用 React / Next.js 做官网或博客;
- 你评估 Strapi、Payload、Contentful、Sanity……各自都不错,但没有一个是「装完就能写、写完就能发」的完整发布平台;
- 你 fork Next.js 博客模板,接上 Headless 后端,再自己搭媒体库、评论、SEO、部署脚本;
- 三个月后博客还没上线,你却维护了五个仓库。
与此同时,WordPress 依然占据全球 40%+ 的网站份额。PHP 被嘲笑「过时」,Gutenberg 被吐槽,可它仍是无数站长、内容团队、中小企业的默认选择。
React 已经统治前端十年,为什么仍然没有自己的 WordPress?
这不是技术能力问题,而是产品形态问题。过去三年我们反复听到同一个需求:「能不能像 WordPress 一样管内容,但前台用 Next.js?」现有方案要么只给 API,要么把 Admin 和主题焊死,要么需要 Docker + MySQL + 六个 npm 包才能写下第一段文字。
于是我们做了 ReactPress 4.0——面向 React 时代的开源发布平台(Open Source CMS / React Publishing Platform),而不是又一个需要你自己拼装的 Headless 后端。
SEO 关键词: React CMS · Next.js CMS · WordPress alternative · React publishing platform · Open source CMS
目录
- 一句话总结
- 行业问题
- WordPress 为什么成功
- React 生态缺失
- ReactPress 理念
- 系统架构
- 眼见为实
- Admin 写作界面
- 主题系统
- 插件系统
- 桌面客户端
- Headless API
- SEO 与性能
- 安全模型
- 部署模式
- 迁移路径
- 适用场景
- 路线图
- 常见问题
- 快速开始
- 结语
关于本文: 中文完整版 · 与英文版结构对应 · 最后更新 2026-07-12 · English version
一句话总结
| 问题 | 简短回答 |
|---|---|
| ReactPress 是什么? | 自托管 React 发布平台:NestJS API + Vite Admin + Next.js 主题 + Hook 插件 + CLI + Electron 桌面端 |
| 是 Headless CMS 吗? | 包含 Headless REST,但交付更多——访客站、Admin、扩展开箱即用 |
| WordPress 替代? | 是,适合要 WordPress 式工作流 + 现代 React/Next.js 栈的团队 |
| 多快能跑起来? | npm i -g @fecommunity/reactpress → reactpress init → 约 60 秒 |
| 许可证 | MIT——可 fork、自托管、商用 |
| 当前版本 | 4.0(代号 Extend)——插件、桌面、npm 主题 catalog |
npm i -g @fecommunity/reactpress
mkdir my-site && cd my-site
reactpress init
| 服务 | 地址 |
|---|---|
| 访客站 | http://localhost:3001 |
| Admin | http://localhost:3001/admin/ |
| API | http://localhost:3002/api/health |
一、行业问题
现代内容系统逼你在编辑体验、前端自由度、开箱即用之间做取舍。
1.1 不可能三角
| 路径 | 编辑 | 前端自由 | 开箱即用 | 现代性能 |
|---|---|---|---|---|
| WordPress | ✅ | ❌ | ✅ | △ |
| SSG / 纯 Next.js | ❌ | ✅ | △ | ✅ |
| Headless CMS | △ | ✅ | ❌ | 取决于前台 |
| 理想的 React 发布平台 | ✅ | ✅ | ✅ | ✅ |
WordPress 式 CMS:会写,但跑不快
内容、主题、插件焊在 PHP 运行时里。对非技术用户友好,但 React 团队难以复用组件库,Headless 是后补路径,性能常依赖缓存插件。
静态站点生成器:快,但没有真 CMS
内容变更 = 开发者改 Markdown + CI 构建。运营无法独立发稿。
Headless CMS:灵活,但要自己组装整机
Strapi、Payload 等把 API 做得很好,但通常不交付访客站和日常写作 UI。典型路径:选型 → 配 Schema → 写 Next.js 前台 → 做 SEO → 配媒体 → 写部署脚本——对「这周就要上线的博客」过重。
1.2 前端负责人的真实一周
周一 产品要博客+SEO+运营发稿。周二 选定 Strapi,搭 Docker。周三 写 Next.js 前台。周四 做 sitemap/OG/评论。周五 部署四套 CI。 下周一 产品问:「什么时候能发文?」
问题不是某个工具差,而是没有人交付完整的发布闭环。ReactPress 要结束这个循环。
1.3 为什么「再做一个 Headless CMS」不够
行业不缺 Headless,缺的是:
- 默认就有的生产级访客站
- 运营愿意每天打开的 Admin
- 装插件而非 fork core 的扩展点
doctor一条命令的诊断入口
二、WordPress 为什么成功
2.1 唯一入口,零决策疲劳
下载 → 数据库 → /wp-admin/。一条路径。ReactPress 学习这一点:reactpress init 约 60 秒得整机。
2.2 Core / Theme / Plugin 边界
| WordPress | ReactPress | 职责 |
|---|---|---|
| wp-admin | Admin | 内容管理 |
| Theme | themes/* | 访客 Next.js 站 |
| Plugin | plugins/* | Hook 扩展 |
| REST API | /api/* | Headless 默认开启 |
| — | Desktop | 离线写作 |
2.3 插件生态即生命力
WordPress 60,000+ 插件。ReactPress 4.0 用 plugin.json + Hook 让扩展成为平台一等公民。
2.4 我们学习的与拒绝的
学习: 唯一入口、清晰边界、作者优先、数据可迁移。
拒绝: PHP 主题焊死 Admin、用插件数量掩盖架构债、默认绑定臃肿 Docker 栈。
Same editing workflow, modern Next.js delivery.
三、React 生态缺失
编辑者友好
↑
WordPress | ReactPress(目标位)
|
Headless ───────────┼─────────── 全栈框架
↓
开发者友好
缺口在右上角: 编辑者与开发者都满意,技术栈统一在 React/Next.js。
3.1 主流方案对比
| 方案 | 默认交付 | 访客站 |
|---|---|---|
| Strapi / Payload | API + Admin | 无 |
| Next.js 博客模板 | 示例代码 | 有,无 CMS |
| Headless WordPress | REST | 自建 |
| ReactPress | API + Admin + 主题 + 插件 + CLI + 桌面 | Next.js SSR |
搜索 「Next.js CMS」 多半是如何接入 Headless 的教程,而非一条命令装完整 CMS——这就是产品缺口。
3.2 社区里反复出现的话
- 「我们已经在用 Next.js,不想为博客再上 PHP WordPress。」
- 「Strapi 能用,但前台花了两个周末。」
- 「有没有自托管开源方案,而不是又一个组装套件?」
ReactPress 4.0 的每一项能力——bundled CLI、SQLite 默认、npm 主题、Hook 插件、Electron 桌面——都对应真实用户故事。
3.3 ReactPress 迭代脉络
| 版本 | 代号 | 要点 |
|---|---|---|
| 3.0 | Platform | 一条 CLI、约 60 秒起站 |
| 3.1+ | Toolkit | 统一 API 契约、Next 14 |
| 4.0 | Extend | 插件、桌面、npm 主题 catalog |
四、ReactPress 理念
Admin 管内容 · 主题管 呈现 · 插件管逻辑 · API 管数据 · Toolkit 管契约
4.1 与 Headless CMS 的差异
| 维度 | Headless CMS | ReactPress |
|---|---|---|
| 交付物 | 内容 API | API + Admin + 主题 + 插件 + CLI + 桌面 |
| 访客站 | 你负责 | 官方 Next.js 主题,可替换 |
| 上手 | 部署后端 → 开发前台 | reactpress init ~60 秒 |
4.2 架构红线
- Admin 不服务访客页;主题不服务
/admin/ - 所有前端仅通过 Toolkit 访问 API
- Server 不依赖任何前端包
- 主题禁止直连数据库
4.3 三十秒上手
npm i -g @fecommunity/reactpress
mkdir my-site && cd my-site
reactpress init
默认 SQLite,无需 Docker。reactpress doctor 诊断环境问题。
4.4 两类用户
| 用户 | 入口 |
|---|---|
| 终端用户 | npm i -g @fecommunity/reactpress → init |
| 贡献者 | clone monorepo → pnpm dev |
4.5 与可视化建站器的边界
Webflow、Framer 适合营销落地页;ReactPress 服务把代码当资产的团队——主题在 Git、内容在 CMS。
五、系统架构
5.1 创作到交付
- 作者在 Admin / Desktop 创建内容
- 请求经 Toolkit 到 NestJS API
- Plugin 在 Hook 点处理 SEO、摘要等
- 写入 SQLite / MySQL
- Next.js 主题 SSR/ISR 渲染给访客
5.2 包职责
| 包 | 职责 |
|---|---|
| server | 业务、持久化、鉴权、Hook |
| web | Admin UI(Vite CSR) |
| themes/* | 访客站(SSR/SEO) |
| toolkit | API 客户端、类型 |
| plugins/* | Hook + Admin 插槽 |
| desktop | Electron + 本地 API |
| cli | init / doctor / 编排 |
5.3 目录结构
my-site/
├── .reactpress/
│ ├── config.json
│ ├── runtime/{theme-id}/
│ ├── plugins/{plugin-id}/
│ └── reactpress.db
├── .env
└── uploads/
备份:tar czf backup.tar.gz .reactpress uploads
5.4 技术选型
| 决策 | 选择 | 原因 |
|---|---|---|
| API | NestJS | 模块化、Hook 友好 |
| Admin | Vite SPA | 交互密集 |
| 访客站 | Next.js | SSR/ISR、SEO |
| 扩展 | Hook + manifest | WordPress 式心智 |
| 默认 DB | SQLite | 零配置 |
5.5 端口
| 进程 | 端口 |
|---|---|
| 主题(访客) | 3001 |
| API | 3002 |
| 主题预览 | 3003 |
六、眼见为实
6.1 CLI:约 60 秒从安装到上线

