开发文档

本分区面向开发者与运维人员,记录 p2pee 官网与控制台的工程实践。

技术栈

层选型
全栈框架Nuxt 3 / 4(前端 SPA + Nitro 服务端)
前端 UIVuetify 3 + Element Plus + Pinia
数据MySQL(Sequelize 为主);SQLite(better-sqlite3,用于请求统计)
认证JWT(Authorization 头)
其他dayjs、mqtt、nanoid、sharp(构建期图片处理)

目录结构

项目根/
├─ app/                     # 前端:pages / components / layouts / stores / utils
│  ├─ pages/dashboard/      # 控制台页面
│  ├─ components/docs/      # 文档站组件
│  └─ utils/docs-nav.ts     # 文档站侧栏结构(单一事实来源)
├─ content/docs/            # 文档站内容源(Markdown)
├─ server/                  # Nitro 后端
│  ├─ api/                  # 业务接口
│  ├─ middleware/           # 认证 / 响应封装 / 主题注入
│  └─ routes/               # sitemap、llms.txt、raw 原文端点
├─ public/                  # 静态资源与官网首页
└─ scripts/                 # 构建与运维脚本

文档站是怎么来的

文档站由 @nuxt/content 驱动,内容源是仓库里的 content/docs/**/*.md,与页面代码同源同仓:

  • 侧栏结构写在 app/utils/docs-nav.ts,同一个文件同时驱动侧栏渲染、上下篇顺序与构建期预渲染路由。
  • 文档路由通过 Nuxt 的 routeRules 单独开启 SSR 并预渲染成静态 HTML,因此 SEO 表现与纯静态站点一致。
  • 其余页面(控制台等)保持 SPA 行为不变。

新增一篇文档

  1. 新建 content/docs/<分区>/<文件名>.md;
  2. 在 app/utils/docs-nav.ts 对应分组的 items 里加一行;
  3. 本地 npm run dev 即时可见;生产环境需要重新构建(文档页是构建期产出的静态 HTML)。
frontmatter 必填

每篇文档必须写 title 与 description:前者决定页面标题与侧栏文案来源,后者是搜索摘要的主要来源。 ::

写文档的几条约定

  • 站内链接写站内绝对路径且不带 .md:[安装部署](/docs/file/cli)。
  • 提示块用 MDC 语法:::callout{type="tip" title="标题"} … ::。
  • 指向仓库路径(源码目录等,不属于网站)的链接请写成行内代码,避免死链。
  • 图片放在 public/docs-image/ 下,用 /docs-image/xxx.png 引用。

相关文档