Skip to content

Commit deef079

Browse files
longsizhuogithub-actions[bot]
authored andcommitted
fix(site-url): preview deploy 用 VERCEL_URL 兜底,避免 Vercel preview 构建炸
前一版改成 prod 无 NEXT_PUBLIC_SITE_URL 直接 throw,没考虑 Vercel preview/branch deploy 也跑在 NODE_ENV=production 里、且 Vercel project setting 里通常只给 prod 配 NEXT_PUBLIC_SITE_URL,所以 preview build 在 collect 阶段就被 _not-found 路由的 SITE_URL 求值炸掉。修法:检测 VERCEL_ENV=preview 时用系统注入的 VERCEL_URL(形如 myproject-git-branch-team.vercel.app),prod 仍 throw 不接受 VERCEL_URL 避免漏配静默用 *.vercel.app 域名。
1 parent 0c40a35 commit deef079

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

lib/site-url.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
* 指向 prod 域的 sitemap/robots,典型的"漏配变静默错地址"失败模式。
1616
*
1717
* 新策略:
18-
* - 生产 (NODE_ENV === "production"):env 缺失 → 模块加载时抛错,构建/启动失败。
18+
* - 生产 (VERCEL_ENV === "production" 或裸 NODE_ENV=production):env 缺失 → 模块加载时抛错,构建/启动失败。
19+
* - Vercel preview / branch deploy:env 缺失 → 用 Vercel 系统注入的 VERCEL_URL
20+
* (形如 myproject-git-branch-team.vercel.app),preview 站本来就是临时域名,不应卡 build。
1921
* - 开发/测试:env 缺失 → fallback 到 http://localhost:3000(与 next start 默认端口
2022
* 和项目里 OAuth 回调、rewrites 的 localhost:3000 约定一致),保留本地联调无门槛。
2123
*/
@@ -45,6 +47,13 @@ function resolveSiteUrl(): string {
4547
return normalizeSiteUrl(raw);
4648
}
4749

50+
// Vercel preview / branch deploy:用系统注入的 VERCEL_URL(hostname 形式,无协议头)。
51+
// VERCEL_ENV 取值 "production" | "preview" | "development";只在 preview 走这条 fallback。
52+
// production 故意不接受 VERCEL_URL,避免漏配 env 时静默用 *.vercel.app 域名替代真域名。
53+
if (process.env.VERCEL_ENV === "preview" && process.env.VERCEL_URL) {
54+
return normalizeSiteUrl(process.env.VERCEL_URL);
55+
}
56+
4857
if (process.env.NODE_ENV === "production") {
4958
// 故意抛错:漏配 env 时构建/启动直接失败,比静默产出指向错误域名的 sitemap 安全。
5059
throw new Error(

0 commit comments

Comments
 (0)