v1.0.0 to v1.0.0

15 added, 13 removed. Audit A to A.

---
+
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:
+ - 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'
+ 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 配置 | 说明 |
+ | ---------------- | --------------------------- | ------------------- |
+ | 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 已配置