[{"data":1,"prerenderedAt":286},["ShallowReactive",2],{"docs:/docs/dev":3},{"id":4,"title":5,"body":6,"description":278,"extension":279,"meta":280,"navigation":281,"path":282,"seo":283,"stem":284,"__hash__":285},"docs/docs/dev/index.md","开发文档",{"type":7,"value":8,"toc":267},"minimark",[9,12,21,25,97,100,110,113,128,157,161,192],[10,11,5],"h1",{"id":5},[13,14,15,16,20],"p",{},"本分区面向",[17,18,19],"strong",{},"开发者与运维人员","，记录 p2pee 官网与控制台的工程实践。",[22,23,24],"h2",{"id":24},"技术栈",[26,27,28,41],"table",{},[29,30,31],"thead",{},[32,33,34,38],"tr",{},[35,36,37],"th",{},"层",[35,39,40],{},"选型",[42,43,44,56,64,77,89],"tbody",{},[32,45,46,50],{},[47,48,49],"td",{},"全栈框架",[47,51,52,55],{},[17,53,54],{},"Nuxt 3 / 4","（前端 SPA + Nitro 服务端）",[32,57,58,61],{},[47,59,60],{},"前端 UI",[47,62,63],{},"Vuetify 3 + Element Plus + Pinia",[32,65,66,69],{},[47,67,68],{},"数据",[47,70,71,72,76],{},"MySQL（Sequelize 为主）；SQLite（",[73,74,75],"code",{},"better-sqlite3","，用于请求统计）",[32,78,79,82],{},[47,80,81],{},"认证",[47,83,84,85,88],{},"JWT（",[73,86,87],{},"Authorization"," 头）",[32,90,91,94],{},[47,92,93],{},"其他",[47,95,96],{},"dayjs、mqtt、nanoid、sharp（构建期图片处理）",[22,98,99],{"id":99},"目录结构",[101,102,108],"pre",{"className":103,"code":105,"language":106,"meta":107},[104],"language-text","项目根/\n├─ app/                     # 前端：pages / components / layouts / stores / utils\n│  ├─ pages/dashboard/      # 控制台页面\n│  ├─ components/docs/      # 文档站组件\n│  └─ utils/docs-nav.ts     # 文档站侧栏结构（单一事实来源）\n├─ content/docs/            # 文档站内容源（Markdown）\n├─ server/                  # Nitro 后端\n│  ├─ api/                  # 业务接口\n│  ├─ middleware/           # 认证 / 响应封装 / 主题注入\n│  └─ routes/               # sitemap、llms.txt、raw 原文端点\n├─ public/                  # 静态资源与官网首页\n└─ scripts/                 # 构建与运维脚本\n","text","",[73,109,105],{"__ignoreMap":107},[22,111,112],{"id":112},"文档站是怎么来的",[13,114,115,116,119,120,123,124,127],{},"文档站由 ",[73,117,118],{},"@nuxt/content"," 驱动，内容源是仓库里的 ",[73,121,122],{},"content/docs/**/*.md","，",[17,125,126],{},"与页面代码同源同仓","：",[129,130,131,143,154],"ul",{},[132,133,134,135,138,139,142],"li",{},"侧栏结构写在 ",[73,136,137],{},"app/utils/docs-nav.ts","，同一个文件同时驱动侧栏渲染、上下篇顺序与",[17,140,141],{},"构建期预渲染路由","。",[132,144,145,146,149,150,153],{},"文档路由通过 Nuxt 的 ",[73,147,148],{},"routeRules"," 单独开启 SSR 并预渲染成",[17,151,152],{},"静态 HTML","，因此 SEO 表现与纯静态站点一致。",[132,155,156],{},"其余页面（控制台等）保持 SPA 行为不变。",[158,159,160],"h3",{"id":160},"新增一篇文档",[162,163,164,171,181],"ol",{},[132,165,166,167,170],{},"新建 ",[73,168,169],{},"content/docs/\u003C分区>/\u003C文件名>.md","；",[132,172,173,174,176,177,180],{},"在 ",[73,175,137],{}," 对应分组的 ",[73,178,179],{},"items"," 里加一行；",[132,182,183,184,187,188,191],{},"本地 ",[73,185,186],{},"npm run dev"," 即时可见；",[17,189,190],{},"生产环境需要重新构建","（文档页是构建期产出的静态 HTML）。",[193,194,197,208,211,249,252],"callout",{"title":195,"type":196},"frontmatter 必填","warning",[13,198,199,200,203,204,207],{},"每篇文档必须写 ",[73,201,202],{},"title"," 与 ",[73,205,206],{},"description","：前者决定页面标题与侧栏文案来源，后者是搜索摘要的主要来源。\n::",[158,209,210],{"id":210},"写文档的几条约定",[129,212,213,225,235,238],{},[132,214,215,216,127,222,142],{},"站内链接写",[17,217,218,219],{},"站内绝对路径且不带 ",[73,220,221],{},".md",[73,223,224],{},"[安装部署](/docs/file/cli)",[132,226,227,228,231,232,142],{},"提示块用 MDC 语法：",[73,229,230],{},"::callout{type=\"tip\" title=\"标题\"}"," … ",[73,233,234],{},"::",[132,236,237],{},"指向仓库路径（源码目录等，不属于网站）的链接请写成行内代码，避免死链。",[132,239,240,241,244,245,248],{},"图片放在 ",[73,242,243],{},"public/docs-image/"," 下，用 ",[73,246,247],{},"/docs-image/xxx.png"," 引用。",[22,250,251],{"id":251},"相关文档",[129,253,254,261],{},[132,255,256],{},[257,258,260],"a",{"href":259},"/docs/dev/deploy","打包与部署",[132,262,263],{},[257,264,266],{"href":265},"/docs/dev/theme-cover","主题封面生成",{"title":107,"searchDepth":268,"depth":268,"links":269},3,[270,272,273,277],{"id":24,"depth":271,"text":24},2,{"id":99,"depth":271,"text":99},{"id":112,"depth":271,"text":112,"children":274},[275,276],{"id":160,"depth":268,"text":160},{"id":210,"depth":268,"text":210},{"id":251,"depth":271,"text":251},"p2pee 项目开发文档：技术栈、目录结构、构建打包、部署与内部工具链说明。","md",{},true,"/docs/dev",{"title":5,"description":278},"docs/dev/index","_lMPRZwVjq9b4H-rkV9a7D-cctW94dfpPv5N3huEcdM",1792518096627]