UI-UX/src/lib/tos.ts
iye 8c88943a06
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 5m0s
feat(tos): point all static assets to volcano TOS bucket
资源已上传到 https://cyberstar.tos-cn-shanghai.volces.com/cyber-star/
代码改动:
- 新增 src/lib/tos.ts 提供 tosUrl(path) 工具,读 NEXT_PUBLIC_TOS_DOMAIN
- mock-data.ts: portrait/gallery 切到 .webp, videoUrl 走 TOS, 全部通过 tosUrl()
- page.tsx Hero PV 走 tosUrl("videos/hero-pv.mp4")
- next.config.ts 把火山 TOS 域名(沪/京)+ 火山 CDN 加进 images.remotePatterns 白名单
- .env.example 更新 NEXT_PUBLIC_TOS_DOMAIN 示例为实际桶域名

体积影响 (与之前打包给运维的 cyber-star-assets.tar.gz 一致):
- 立绘 5MB png → 100-300KB webp (-95%)
- 单人 solo 5-10MB mp4 → 1-3MB (-70%)
- Hero PV 45MB → 12MB (-70%)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:37:46 +08:00

19 lines
670 B
TypeScript

/**
* TOS 资源 URL 拼接工具
*
* 用法:
* tosUrl("portraits/001.webp")
* → https://cyberstar.tos-cn-shanghai.volces.com/cyber-star/portraits/001.webp
*
* 环境变量 NEXT_PUBLIC_TOS_DOMAIN 配置:
* .env.local / .env.production → 完整的桶 + 路径前缀 (含 scheme, 不含末尾 /)
* 未设置时 fallback 到相对路径 (/path/...), 适合本地用 public/ 静态文件托管的场景。
*/
const TOS_BASE = (process.env.NEXT_PUBLIC_TOS_DOMAIN ?? "").replace(/\/+$/, "");
export function tosUrl(path: string): string {
const clean = path.replace(/^\/+/, "");
if (!TOS_BASE) return `/${clean}`;
return `${TOS_BASE}/${clean}`;
}