本地开发
本页面向本地运行与修改代码。首次安装真实邮箱请从部署指南开始。
前置要求
- Node.js: >= 22.12(本地验证与 CI 推荐 Node.js 24)
- 包管理器: pnpm 10.34.5(以下命令直接使用
npx,无需全局安装 pnpm)
完整运行一个本地 Worker
使用与生产环境相同的架构模板,由单 Worker 提供前端页面、API 和邮件处理。无需预先登录 Cloudflare、无需填写真实资源 ID、无需手动执行 SQL。
首次运行,在仓库根目录执行:
sh
npx --yes pnpm@10.34.5 install --frozen-lockfile
node -e "const fs=require('node:fs');fs.copyFileSync('apps/worker/wrangler.example.toml','apps/worker/wrangler.toml',fs.constants.COPYFILE_EXCL)"
node -e "require('node:fs').writeFileSync('apps/worker/.dev.vars','SETUP_SECRET='+require('node:crypto').randomBytes(32).toString('hex')+'\n',{flag:'wx'})"
npx --yes pnpm@10.34.5 dev:worker复制和凭据生成命令会自动拒绝覆盖已有文件;已有实例会完整保留自己的配置。Worker 启动时会自动构建前端,等待终端出现
Ready on http://127.0.0.1:8787。
在浏览器打开 http://127.0.0.1:8787,从 apps/worker/.dev.vars 读取安装凭据完成初始化:
- 输入
SETUP_SECRET并验证。 - 填写至少一个邮箱域名(本地测试可填
example.com,无需配置真实 DNS)。 - 选择域名,输入管理员邮箱前缀与初始密码。
- 核对并确认;此时数据库自动建表、初始化管理员并登录系统。
停止只需按 Ctrl+C。本地数据持久化在 apps/worker/.wrangler/state,下次重复执行 dev:worker 即可无缝继续使用。
本地模拟收信
本地运行不会收到真实公网邮件。将以下内容保存为 test-email.eml(收件人改为已创建的邮箱):
text
From: Local Sender <sender@example.net>
To: owner@example.com
Subject: Local mail test
Message-ID: <local-test-001@example.net>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Hello from the local email handler!在该文件所在目录运行(Windows PowerShell 请使用 curl.exe):
sh
curl --request POST "http://127.0.0.1:8787/cdn-cgi/handler/email?from=sender@example.net&to=owner@example.com" --header "Content-Type: message/rfc822" --data-binary "@test-email.eml"刷新网页收件箱即可看到新信件。
修改代码时的热重载(双进程开发)
在仓库根目录执行:
sh
npx --yes pnpm@10.34.5 install --frozen-lockfile
npx --yes pnpm@10.34.5 dev一个终端同时启动 Vite 开发服务器(3001)和 Worker(8787)。访问 http://127.0.0.1:3001,Vite 自动将 API、OAuth 端点和 manifest 代理到 8787,享受前端即时热重载。