用于快速搭建展示型网站的 Nuxt 模板,默认集成:
- Nuxt 4
- Nuxt UI(禁用 Google Fonts)
- Nuxt Content(内容统一在
content/管理) - Cloudflare Pages 部署 preset
server/api咨询表单接口(Serverless Functions)
- AI 机器可读规范:
template.spec.ai.json - 人类可读规范:
template.spec.human.zh-CN.md - 兼容规则:
ai.rules.json/ai.rules.strict.json - 前端工程规则:
docs/frontend-engineering-rules.md - 前端工程规则(机器可读):
docs/frontend-engineering-rules.ai.json - Agent 默认约束:
AGENTS.md
nuxt:4.4.2@nuxt/ui:4.5.1@nuxt/content:3.12.0
pnpm install
# Windows PowerShell:
Copy-Item .env.example .env
# macOS/Linux:
# cp .env.example .env
pnpm dev访问 http://localhost:3000。
app/
assets/css/main.css # 全局样式与设计变量
components/ConsultationForm.vue
components/ContentPage.vue # 内容驱动页面主体
pages/index.vue # 首页
pages/[...slug].vue # 其余内容页
content/
*.md # 所有展示页面内容
server/
api/contact.post.ts # 咨询表单 API
content.config.ts # Content schema(Nuxt Studio 可读)
nuxt.config.ts # 模块、Cloudflare、Studio、Preview 配置
- 所有页面内容编辑在
content/*.md。 - 页面字段 schema 定义在
content.config.ts。 - 预览模式:
NUXT_CONTENT_PREVIEW_ENABLED=true|false(默认建议false,需要时再开启)
- 已在
nuxt.config.ts设置ui.fonts = false,禁用@nuxt/fonts自动远程字体加载。 - 在
app/assets/css/main.css中配置系统字体栈和本地优先回退。
- 前端表单组件:
app/components/ConsultationForm.vue - 服务端处理:
server/api/contact.post.ts - 数据访问封装:
server/db/client.ts+server/db/repositories/contact-inquiry.repository.ts(Drizzle ORM + D1) - 接口地址:
POST /api/contact - 可选 Webhook 转发:
CONTACT_WEBHOOK_URLCONTACT_WEBHOOK_SECRET
- Drizzle 配置:
drizzle.config.ts - Schema 文件:
server/db/schema.ts - 迁移目录:
migrations/
生成迁移:
pnpm db:generate应用迁移到本地 D1(开发):
pnpm db:migrate:local应用迁移到远端 D1(Cloudflare):
pnpm db:migrate:remote- Build command:
pnpm build:pages - Build output directory:
dist
NUXT_CONTENT_PREVIEW_ENABLED=falseCLOUDFLARE_ACCOUNT_ID=<你的账号ID>CLOUDFLARE_PAGES_PROJECT_NAME=<你的Pages项目名>CLOUDFLARE_D1_DATABASE_NAME=<你的D1数据库名>CLOUDFLARE_D1_DATABASE_ID=<你的D1数据库ID>CONTACT_WEBHOOK_URL(可选)CONTACT_WEBHOOK_SECRET(可选)
wrangler d1 create nuxt-content-db把返回的 database_id 写入 .env 的 CLOUDFLARE_D1_DATABASE_ID。
pnpm cf:sync会基于 .env 生成本地 wrangler.toml(已在 .gitignore 中忽略,不会被提交)。
pnpm build:pages
pnpm pages:devpnpm build:pages
pnpm pages:deploy@nuxt/content@3.12.0 在部分环境会缺失一个 preview 依赖文件。模板已在 postinstall 中加入补丁脚本 scripts/patch-nuxt-content.mjs,用于自动修复该问题。
pnpm install
pnpm cf:sync
pnpm dev
pnpm build
pnpm generate
pnpm preview
pnpm build:pages
pnpm pages:dev
pnpm pages:deploy
pnpm db:generate
pnpm db:migrate:local
pnpm db:migrate:remote
pnpm test
pnpm test:unit
pnpm test:unit:watch
pnpm test:e2e
pnpm test:e2e:headed
pnpm test:e2e:ui
pnpm test:e2e:install
pnpm validate:template-specpnpm install:安装项目依赖。pnpm cf:sync:根据.env生成本地wrangler.toml(Cloudflare Pages/D1 配置)。pnpm dev:启动 Nuxt 本地开发服务器。pnpm build:构建生产版本(Nuxt + Nitro)。pnpm generate:生成静态站点产物。pnpm preview:本地预览构建结果。pnpm build:pages:按 Cloudflare Pages 流程构建(先cf:sync再 build)。pnpm pages:dev:用 Wrangler 本地模拟 Pages 运行dist。pnpm pages:deploy:通过 Wrangler 部署dist到 Cloudflare Pages。pnpm db:generate:根据server/db/schema.ts生成 Drizzle 迁移文件到migrations/。pnpm db:migrate:local:把迁移应用到本地 D1。pnpm db:migrate:remote:把迁移应用到 Cloudflare 远端 D1。pnpm test:执行完整测试(单测 + E2E)。pnpm test:unit:执行 Vitest 单元测试。pnpm test:unit:watch:启动 Vitest 监听模式。pnpm test:e2e:执行 Playwright E2E(默认自动拉起本地 dev)。pnpm test:e2e:headed:执行有界面模式 E2E,便于调试。pnpm test:e2e:ui:打开 Playwright UI 测试面板。pnpm test:e2e:install:首次安装 Playwright 浏览器。pnpm validate:template-spec:校验模板规范文件与项目配置是否一致(适合 CI)。pnpm postinstall:安装后自动执行补丁与 Nuxt prepare(通常无需手动执行)。
pnpm test:unit
pnpm test:unit:watch首次安装浏览器(仅需一次):
pnpm test:e2e:install本地回归(自动拉起 pnpm dev --port 3001):
pnpm test:e2e对已部署环境回归(不启动本地 dev):
E2E_BASE_URL=https://your-preview.pages.dev pnpm test:e2e