---
name: devops/deploy-vercel
description: Vercel 部署方法论，使用 vercel CLI 部署前端和全栈应用（Next.js、React、Vue、静态站点）
version: 1.0.0
agent: devops
type: methodology
user-invocable: false
agent-invocable: true
dependencies:
  - shared/tech-stack-detection
triggers:
  - 需要部署到 Vercel 时
  - 项目使用 Next.js 或 React 框架时
  - 需要配置 Vercel 部署配置时
metadata:
  internal: true
---

# Vercel 部署

## 适用场景

- Next.js / React / Vue / Svelte 等前端框架
- 静态站点（HTML/CSS/JS）
- Serverless Functions（API Routes）
- 全栈应用（Next.js full-stack）

## 前置条件

1. 安装 Vercel CLI：`npm i -g vercel`
2. 登录 Vercel：`vercel login`（需要用户交互完成登录）
3. 项目根目录有 `package.json`

## 部署流程

### 1. 检测 Vercel 配置

```bash
# 检查是否已有 vercel.json
ls vercel.json 2>/dev/null && echo "exists" || echo "missing"
```

### 2. 创建 vercel.json（如不存在）

```json
{
  "framework": "nextjs",
  "buildCommand": "npm run build",
  "outputDirectory": ".next",
  "installCommand": "npm install",
  "devCommand": "npm run dev",
  "regions": ["iad1"],
  "env": {
    "NODE_ENV": "production"
  }
}
```

**框架自动检测**：Vercel 会自动识别框架，通常无需手动配置 `framework`。

### 3. 首次部署

```bash
# 首次部署（交互式，需要用户确认项目设置）
vercel

# 非交互式部署（CI 环境）
vercel --yes --prod
```

**首次部署输出示例**：
```
Vercel CLI 37.0.0
🔗  Linked to username/project (created .vercel)
🔍  Inspect: https://vercel.com/username/project/xxx
✅  Production: https://project-xxx.vercel.app
```

### 4. 后续部署

```bash
# 预览部署（staging）
vercel

# 生产部署
vercel --prod
```

### 5. 环境变量管理

```bash
# 添加环境变量
vercel env add DATABASE_URL production

# 列出环境变量
vercel env ls

# 删除环境变量
vercel env rm DATABASE_URL production

# 拉取环境变量到本地 .env
vercel env pull .env.local
```

### 6. 域名绑定

```bash
# 添加自定义域名
vercel domains add example.com

# 列出域名
vercel domains ls
```

## CI/CD 集成

### GitHub Actions 自动部署

```yaml
name: Deploy to Vercel
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm test
      - name: Deploy to Vercel
        uses: amondnet/vercel-action@v25
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.ORG_ID }}
          vercel-project-id: ${{ secrets.PROJECT_ID }}
          vercel-args: '--prod'
```

**需要的 Secrets**：
- `VERCEL_TOKEN`：Vercel Personal Access Token（Settings → Tokens）
- `ORG_ID`：Vercel 团队/个人 ID
- `PROJECT_ID`：Vercel 项目 ID

## 项目类型适配

| 项目类型 | vercel.json 配置 | 说明 |
|----------|------------------|------|
| Next.js | 自动检测 | 无需额外配置 |
| Vite (React/Vue) | `"outputDirectory": "dist"` | 需指定构建输出 |
| 静态 HTML | 无需配置 | 直接部署根目录 |
| SvelteKit | 自动检测 | 使用 adapter-vercel |

## 检查清单

- [ ] `vercel.json` 配置正确（buildCommand、outputDirectory）
- [ ] 环境变量已配置（`vercel env add`）
- [ ] 构建命令在本地验证通过（`npm run build`）
- [ ] 生产部署 URL 可访问
- [ ] 自定义域名已绑定（如需要）
- [ ] CI/CD Secrets 已配置
