fb67355a15062a413365b347fb2e0f6ef7ca8992
Replace the generic Nuxt starter README with comprehensive documentation specific to the Tootaio Studio website project. The new README provides a detailed guide for developers, covering: - Project features and technology stack (Nuxt 4, Content, UI, i18n). - Setup, installation, and environment configuration. - Directory structure and code organization. - Content management workflow using YAML and zod schemas. - i18n implementation for UI text. - UI components, theming, and dark mode. - SEO and security best practices (CSP, routeRules). - Contribution guidelines and deployment suggestions.
Tootaio Studio 网站(Nuxt 4)
Tootaio Studio 的官方网站代码仓库,基于 Nuxt 4、@nuxt/content、@nuxt/ui 与 i18n 构建,采用 TypeScript 与 ESM 配置。项目默认使用 pnpm 进行依赖与脚本管理。
- 在线地址:
https://tootaio.com - 技术要点:内容与 UI 分离(YAML 内容 + JSON 翻译)、类型安全的内容加载、内置 SEO 与 CSP 头部策略
特性概览
- Nuxt 4 与 Vue 3
<script setup lang="ts">,全量 TypeScript 化 - @nuxt/content 管理结构化 YAML 内容,zod 校验 schema,类型安全
- @nuxt/ui 负责 UI 组件与样式,支持暗色模式与主题定制
- @nuxtjs/i18n 多语言(英文、简中),消息分包按需加载
- @nuxtjs/seo 统一 SEO 元信息配置(OG/Twitter/keywords)
- Nitro routeRules 内置严格 CSP、缓存与安全响应头
- 运行时配置集成 WhatsApp 咨询(公开变量)
快速开始
先决条件
- Node.js 18.20+ 或 20+
- pnpm 8+
安装依赖
pnpm i
安装后会自动执行 nuxt prepare(见 package.json:postinstall)。
配置环境变量
cp .env.example .env
必须设置:
NUXT_PUBLIC_WHATSAPP_NUMBER:用于页面内“立刻咨询”按钮,走 WhatsApp H5 链接。
注:nuxt.config.ts 提供默认占位值,生产环境应以 .env 覆盖。
本地开发
pnpm dev
访问 http://localhost:3000,支持热更新(HMR)与暗色模式切换。
常用脚本
- 开发:
pnpm dev - 构建:
pnpm build(产物在.output/) - 预览:
pnpm preview(以生产模式本地运行) - 静态生成:
pnpm generate(SSG 场景) - 代码检查:
pnpm exec eslint .
目录结构
app/:Nuxt 应用源码pages/:页面组件(如app/pages/index.vue,app/pages/webDev.vue)layouts/:布局(默认头部含语言与主题切换)assets/css/main.css:主题与样式(集成@nuxt/ui与tailwindcss)composables/:组合式函数(如LocalizedCollection.ts,NavLinks.ts)schemas/:zod 定义(如pricingPlanSchema.ts,buttonSchema.ts)
content/:YAML 内容(按语言区分en-US/,zh-CN/)i18n/locales/<locale>/:UI 文案 JSON 包(按页面拆分,如common.json,index.json)public/:静态资源(如favicon.ico,og-image-1.png,_robots.txt)- 根配置:
nuxt.config.ts,content.config.ts,eslint.config.mjs - 文档:
docs/(工程审计、路线等)
内容与多语言
内容模型(@nuxt/content)
项目在 content.config.ts 中用 zod 定义了页面内容的 schema,并建立集合与源文件的对应关系:
index_en↔content/en-US/index.ymlindex_zh↔content/zh-CN/index.ymlwebDev_en↔content/en-US/webDev.ymlwebDev_zh↔content/zh-CN/webDev.yml
在页面中通过类型安全的加载器获取内容:
// 示例:在页面/组件中获取本地化内容
const { data: page } = await useLocalizedCollection('index')
上述加载器会根据当前语言自动选择集合,并在缺失时回退到英文。
UI 文案(@nuxtjs/i18n)
- 语言:
en(en-US)、zh-CN - 加载策略:
strategy: "no_prefix" - 文案文件:
i18n/locales/<locale>/*.json
示例 key:index.featuredProjects.viewDemo, common.button.submit。
新增页面或模块时,请同步维护中英文版本的 YAML 与 JSON,保持 key 一致。
UI 与主题
- 组件库:
@nuxt/ui(UPage*,UHeader,UButton,UTabs,UModal等) - 主题:
app/assets/css/main.css中可定制字体与主色(项目默认霓虹红--color-primary) - 暗色模式:内置
UColorModeButton,图标与样式随模式自适应 - 图标:
@iconify-json/mdi与skill-icons系列(通过UIcon使用)
SEO 与安全
- SEO:
@nuxtjs/seo统一设置标题、描述、OG、Twitter 等元信息(见nuxt.config.ts中DEFAULT_SEO) - 站点地址:
site.url = https://tootaio.com - 安全头:在
routeRules配置了 CSP、X-Content-Type-Options,Referrer-Policy等;静态资源(/_nuxt/**)设置了长期缓存 - 图片白名单:
img-src允许self与https://img.tootaio.com与data:
运行时配置与外部集成
- 环境变量:
NUXT_PUBLIC_WHATSAPP_NUMBER(公开变量,用于发起 WhatsApp 咨询) - 组合式函数:
useWhatsAppMsgSender()会根据该号码构造 WhatsApp H5 链接并window.open - 示例入口:
app/components/webDev/ContactSalesModal.vue在提交后拼接多语言消息并发起咨询
代码规范与校验
- 风格:TypeScript、2 空格缩进、ESM 配置、组合式函数使用 PascalCase
- ESLint:
@nuxt/eslint预设,配置见eslint.config.mjs - 手动检查:
pnpm exec eslint .
测试(当前状态)
- 暂未配置自动化测试
- 建议:单测使用 Vitest,E2E 使用 Playwright
- 在此之前请进行本地验证:
pnpm dev运行并切换语言- 校验
content/*.yml是否符合content.config.ts中的 schema pnpm build与pnpm preview能否成功
提交与协作
- 提交规范:Conventional Commits(含 scope),如:
feat(content): ...,refactor(ui): ... - 分支命名:
feat/<desc>、fix/<desc> - PR 说明:改动目的 / 关联 Issue / UI 截图 / 测试步骤
- 内容改动请确保中英文同步更新(YAML 与 i18n JSON)
部署建议
- 服务器渲染(默认):
pnpm build生成.output/后按 Nuxt/Nitro 的 Node 运行方式部署 - 静态站点:
pnpm generate进行 SSG(请根据实际路由策略评估可行性) - 常见平台:Vercel / Netlify / 任意 Node 主机(注意保留
routeRules与响应头设置)
参考文件
- 配置:
nuxt.config.ts:1、content.config.ts:1 - 页面:
app/pages/index.vue:1、app/pages/webDev.vue:1 - 主题:
app/assets/css/main.css:1 - 多语言:
i18n/locales/en-US/common.json:1、i18n/locales/zh-CN/common.json:1 - 环境:
.env.example:1(复制为.env并填写)
许可
如无单独说明,本仓库内容归 Tootaio Studio 所有。
Description
Languages
TypeScript
49.6%
Vue
47.1%
CSS
2.9%
JavaScript
0.4%