Skip to content
返回部署

使用 Vercel 部署

Next.js、Astro 和静态站点的零配置部署,支持边缘函数和预览部署。

平台入门

为什么

Vercel 消除了前端全栈应用的基础设施管理。Git push 自动触发构建、预览部署和生产提升。边缘函数在全球靠近用户运行,冷启动低于 50ms。

何时使用

选择 Vercel 用于 Next.js/Astro/Remix 应用、需要每个 PR 预览部署的团队,以及需要边缘中间件但不想管理 Kubernetes 的项目。

如何做

1. 安装 Vercel CLI — npm i -g vercel 2. 关联项目 — 在项目根目录运行 "vercel",导入或创建项目 3. 配置构建 — vercel.json 设置框架覆盖、环境变量、路由 4. 预览部署 — 每次 git push 自动创建预览 URL 5. 生产部署 — 合并到 main 分支或运行 "vercel --prod" 6. 自定义域名 — 在面板添加,配置 DNS CNAME 或域名服务器 7. 边缘函数 — 在 /api 创建函数,导出 config = { runtime: "edge" }

示例

// vercel.json — Astro 项目配置 { "framework": "astro", "buildCommand": "npm run build", "outputDirectory": "dist_astro", "functions": { "api/*.ts": { "runtime": "edge" } }, "headers": [ { "source": "/(.*)", "headers": [ { "key": "X-Content-Type-Options", "value": "nosniff" }, { "key": "X-Frame-Options", "value": "DENY" } ] } ], "redirects": [ { "source": "/old-path", "destination": "/new-path", "permanent": true } ] } // 边缘函数 — api/geo.ts export const config = { runtime: "edge" }; export default function handler(req: Request) { const country = req.headers.get("x-vercel-ip-country") || "unknown"; return Response.json({ country, message: `来自 ${country} 的问候` }); }

常见问题

  • ⚠Vercel 上构建失败但本地通过 — 面板中缺少环境变量
  • ⚠边缘函数超过 1MB 限制 — 动态导入或大依赖撑爆包体积
  • ⚠Hobby 计划 100GB 带宽超限 — 图片优化或视频流快速消耗配额
  • ⚠Serverless 函数冷启动延迟 — 空闲后首次请求需 2-5 秒

最佳实践

  • ✓每个 PR 使用预览部署 — 合并前发现集成问题
  • ✓在 Vercel 面板设置环境变量,不要提交 .env 到 git
  • ✓为 Next.js 启用 Skew Protection — 处理发布期间的双版本部署
  • ✓用 vercel.json rewrites 做 SPA 回退,不要用于 API 代理 — 改用边缘函数

常见问题解答

为什么 Vercel 上构建失败但本地通过?

Vercel 文件系统只读(除 /tmp)且 node_modules 缓存不同。检查构建不写项目根目录,Node 版本一致(用 .nvmrc 或 vercel.json)。

如何为预览和生产分别设环境变量?

Vercel 面板按环境作用域设变量。密钥标 Encrypted 绝不提交。预览变量默认作用于所有预览部署,除非限定到特定 Git 分支。

为什么 Next.js 在 Vercel 上慢?

可能每页都用 SSR。将静态页转 SSG(getStaticProps)或 ISR(revalidate)。Vercel Analytics 显示哪些路由是 SSR 及其 TTFB。

如何部署 monorepo 到 Vercel?

vercel.json 设 rootDirectory 为应用文件夹,Vercel 只构建该工作区。用 Turborepo 缓存——Vercel 原生支持,跳过未变应用。

vercel deploy 和 vercel --prod 有什么区别?

vercel deploy 创建预览部署(唯一 URL,不影响生产)。vercel --prod 提升到生产域名。先在预览测试再提升。