All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 5m0s
资源已上传到 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>
19 lines
670 B
TypeScript
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}`;
|
|
}
|