HSN Phira+(Phira+ V3)三件套之一 · Nuxt 3 SSG 官网 · WASM 谱面/房间查看器 · Tauri 2 Windows/Android 应用壳
Important
HSN Phira+ 三件套之一:ppb(Phira-plus-Backend,后端)· ppf(本仓库,官网)· panel(Phira-plus-panel,管理控制台)。
跨仓冻结契约以三仓工作区的 contracts/README.md(Contract-Freeze v0)与 契约一致性脚本 为准 —— 先改契约,再实现;禁止三边猜字段。
本仓库采用 Apache License, Version 2.0,详见 LICENSE。
Tip
第一次来?直接看快速开始。
PPF(HSN Phira+ Frontend) 是 HSN Phira+ 的官网,面向玩家呈现房间、谱面、社区与 Replay(player presentation / viewer)。一句话数据所有权:PPF 只做展示层,一切身份、策略与数据来自 PPB API;Phira token 永不进入前端。
Warning
本项目使用了AI进行开发
Warning
本项目正处于早期开发阶段,不建议在生产环境部署
- 纯静态 SSG:Nuxt 3
ssr:true+nitro.preset:'static',构建产出.output/public预渲染 HTML,可直接丢给任意静态托管 / 反代 - WASM 查看器(Viewer):
viewer/内 vendor 的 Rust 查看器(monitor-common + monitor-client,Apache-2.0),CI 用wasm-pack --target web构建到src/public/viewer/;TS 集成层(src/viewer/*)在 WASM 缺失时优雅降级 - 完整 SEO:
@nuxtjs/seo生成 robots.txt + sitemap + Organization JSON-LD,usePageSeo提供 canonical/OG/Twitter/hreflang;默认中文(zh)+ 英文(en)双语(prefix_except_default) - 统一 API 客户端:
src/utils/api/{types,errors,client}.ts+useApi(),向 PPB 发起 credentialed CORS 请求,按冻结错误契约error.code本地化 - 认证网关:
/login跳转 PPB Auth 网关(${authBase}/auth/phira/login?return_to=<relative>);客户端永不接触 Phira access/refresh token - 偏好系统:
usePreferencesStore(Pinia)+useState持久化,localStorage 承载 Guest 偏好(命名空间common/ppf/device),登录后按字段合并到账户偏好 - Tauri 2 壳:
src-tauri/为 Windows + Android 应用壳(frontendDist指向 SSG 产物);secure refresh credential、生产 FCM/WNS、签名与 full-exit push 仍是 Release Gate
| 分类 | 文档 |
|---|---|
| 快速开始 | docs/getting-started.md(dev / build / generate / WASM viewer) |
| 配置 | docs/configuration.md(NUXT_PUBLIC_* 环境变量表 + runtimeConfig) |
| 部署 | docs/deployment.md(SSG 构建 → 反代 / 静态托管) |
| 开发 | docs/development.md(模块结构 / 页面 / 查看器 / 测试) |
| 历史计划 | docs/history/PHASE_A_PLAN.md(Phase A 实施计划存档) |
| 技术 | 用途 |
|---|---|
Nuxt 3.21.11 |
框架(SSG,nitro.preset:'static') |
Vue 3.5.41 |
UI 框架 |
TypeScript 5.9 |
类型系统(strict) |
Tailwind CSS 4.3 + @tailwindcss/vite |
样式(设计 token 在 src/assets/css/main.css) |
@heroui/styles 3.2.4 |
HeroUI 框架无关样式层(非 @heroui/vue,无 React runtime) |
@nuxtjs/seo 3.1.0 |
robots / sitemap / JSON-LD / OG |
@nuxtjs/i18n 9.5.6 |
中英双语 |
@pinia/nuxt 1.0.1 + pinia 4.0.2 |
状态管理 |
@vueuse/nuxt 14.4.0 |
VueUse 组合函数 |
@tanstack/vue-virtual 3.13 |
虚拟列表 |
ofetch 1.5.1 |
HTTP 客户端 |
| Rust + wasm-pack | WASM 查看器(仅 CI 构建) |
Note
本地需要 Node ≥ 22 与 pnpm ≥ 11(仓库 packageManager: pnpm@11.8.0,registry 走 npmmirror,见 .npmrc)。WASM 查看器只在 CI 构建(本地 Rust 工具链损坏,勿在本机跑 wasm-pack)。
pnpm install
# 开发预览(:3000)
pnpm dev
# 类型检查 / Lint / 测试
pnpm vue-tsc
pnpm lint
pnpm test
# SSG 构建 → .output/public(预渲染全部路由)
pnpm build
# 预览构建产物
pnpm preview.env.example → .env,显式配置必需的 NUXT_PUBLIC_*(见 docs/configuration.md)。缺失时构建会直接失败,避免自部署误连官方服务。
- 构建期环境变量(
NUXT_PUBLIC_*):NUXT_PUBLIC_API_BASE/NUXT_PUBLIC_AUTH_BASE/NUXT_PUBLIC_SITE_URL等,参考.env.example。 - 运行时配置:
nuxt.config.ts的runtimeConfig.public(apiBase / authBase / siteUrl / analytics / pushVapidPublicKey / appVersion)。 - 完整变量表见 docs/configuration.md。
HSN Phira+ Frontend 采用 Apache License, Version 2.0 — 详见 LICENSE。viewer/ 内 vendor 的 Rust 代码源自 phira-web-monitor 与 phira-mp,同为 Apache-2.0。