【GitHub Actions CD 實戰】#02 React 前端自動部署到 Vercel

測驗:React 前端自動部署到 Vercel

共 5 題,點選答案後會立即顯示結果

1. Vercel 的核心優勢不包含以下哪一項?

  • A. 零配置部署,自動偵測框架
  • B. 自動 HTTPS 憑證,免費 SSL
  • C. 全球 CDN 加速
  • D. 內建資料庫服務

2. 當你建立一個 Pull Request 時,Vercel 會自動觸發什麼類型的部署?

  • A. Production 部署
  • B. Preview 部署
  • C. Development 部署
  • D. Staging 部署

3. 在 Create React App 專案中,環境變數必須以什麼開頭才能被讀取?

  • A. ENV_
  • B. VITE_
  • C. REACT_APP_
  • D. NEXT_PUBLIC_

4. 將 GitHub Repository 連結到 Vercel 後,Push 到 main 分支會觸發什麼動作?

  • A. 觸發 Production 部署,更新正式網站
  • B. 觸發 Preview 部署,產生暫時網址
  • C. 僅執行測試,不會部署
  • D. 需要手動點擊部署按鈕

5. 設定自訂網域時,如果是根網域(apex domain),需要新增哪種類型的 DNS 記錄?

  • A. CNAME 記錄
  • B. A 記錄
  • C. MX 記錄
  • D. TXT 記錄

前言

上一篇我們學會了 GitHub Actions 的基本觀念和 CI 流程。這篇要帶你實際體驗 CD(Continuous Deployment)的威力——把 React 專案自動部署到 Vercel。

當你讀完這篇,你會發現:只要 push 程式碼到 GitHub,網站就自動上線了。這就是現代前端開發的標準流程。

Vercel 是什麼?為什麼選它?

Vercel 是一個專為前端設計的雲端部署平台。它的特色是:

零配置部署
    ↓
自動 HTTPS 憑證
    ↓
全球 CDN 加速
    ↓
免費額度夠用

對 React 開發者來說,Vercel 幾乎是「不需要學習就能用」的部署方案。因為 Vercel 就是 Next.js 的母公司,對 React 生態系的支援非常完整。

Vercel 的核心優勢

特色 說明
零配置 自動偵測框架,無需寫 Dockerfile
自動 HTTPS 免費 SSL 憑證,自動續約
全球 CDN 部署到全球邊緣節點
Preview 部署 每個 PR 自動產生預覽網址
免費額度 個人專案免費,足夠學習使用

將 GitHub Repository 連結到 Vercel

第一步:註冊並登入 Vercel

前往 vercel.com,用 GitHub 帳號登入。這樣 Vercel 就能存取你的 Repository。

第二步:Import 專案

登入後,點擊「Add New…」→「Project」:

1. 選擇要部署的 GitHub Repository
2. Vercel 自動偵測到這是 React 專案
3. 點擊「Deploy」

就這樣,三個步驟,你的網站就上線了。

第三步:確認部署結果

部署完成後,Vercel 會給你一個網址:

https://your-project-name.vercel.app
Code language: JavaScript (javascript)

打開這個網址,你的 React 網站就在上面了。

自動部署機制

這是 Vercel 最強大的功能。一旦連結了 GitHub Repository,它會自動監聽你的程式碼變化:

Push to main branch
        ↓
    觸發 Production 部署
        ↓
    https://your-project.vercel.app 更新

建立 Pull Request
        ↓
    觸發 Preview 部署
        ↓
    https://your-project-abc123.vercel.app(暫時網址)
Code language: JavaScript (javascript)

Production vs Preview 部署

類型 觸發條件 網址 用途
Production Push 到 main 固定網址 正式上線
Preview 建立/更新 PR 每次產生新網址 程式碼審查

Preview 部署特別實用。當你發 PR 請同事 Code Review 時,他不需要 pull 你的程式碼到本機執行,直接點開 Preview 網址就能看到效果。

在 PR 中查看 Preview 網址

每次你建立或更新 PR,Vercel bot 會自動留言:

## Vercel 部署
✅ Preview 部署成功
🔗 https://your-project-git-feature-branch.vercel.app

---
Built by Vercel
Code language: PHP (php)

這個網址會隨著你每次 push 到該分支而自動更新。

環境變數設定

React 專案常需要設定 API 網址等環境變數。在 Vercel 上設定很簡單:

在 Vercel Dashboard 設定

Project Settings → Environment Variables

新增環境變數:

Name Value Environment
REACT_APP_API_URL https://api.example.com Production
REACT_APP_API_URL https://staging-api.example.com Preview

環境變數命名規則

React 專案(Create React App)的環境變數必須以 REACT_APP_ 開頭:

// 在程式碼中使用
const apiUrl = process.env.REACT_APP_API_URL;
Code language: JavaScript (javascript)

如果你用 Vite 建立專案,則是用 VITE_ 開頭:

// Vite 專案
const apiUrl = import.meta.env.VITE_API_URL;
Code language: JavaScript (javascript)

不同環境使用不同值

Vercel 允許你為三種環境設定不同的值:

Production  → main 分支部署時使用
Preview     → PR 預覽部署時使用
Development → 本地開發時使用(vercel dev)

這樣你可以讓 Production 連正式 API,Preview 連測試 API。

自訂 Domain 設定

預設的 .vercel.app 網址雖然能用,但正式專案通常需要自訂網域。

第一步:在 Vercel 新增 Domain

Project Settings → Domains → Add

輸入你的網域,例如 www.mysite.com

第二步:設定 DNS 記錄

Vercel 會告訴你需要新增的 DNS 記錄:

類型: CNAME
名稱: www
:  cname.vercel-dns.com
Code language: HTTP (http)

或者如果是根網域(apex domain):

類型: A
名稱: @
:  76.76.21.21
Code language: HTTP (http)

第三步:等待 DNS 生效

DNS 設定完成後,通常幾分鐘到幾小時會生效。Vercel Dashboard 會顯示驗證狀態:

✓ Valid Configuration
✓ SSL Certificate Issued

看到這兩個打勾,你的自訂網域就設定完成了。

實作:部署 React 專案到 Vercel

現在讓我們實際操作一次完整流程。

假設你已經有一個 React 專案

專案結構可能長這樣:

my-react-app/
├── public/
├── src/
│   ├── App.js
│   └── index.js
├── package.json
└── README.md
Code language: PHP (php)

確認 package.json 有 build script

{
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test"
  }
}
Code language: JSON / JSON with Comments (json)

Vercel 會自動執行 npm run build(或 yarn build),產生 build/ 資料夾後部署。

連結 Vercel 的完整步驟

1. 確保專案已推送到 GitHub
   git add .
   git commit -m "initial commit"
   git push origin main

2. 登入 vercel.com(用 GitHub 帳號)

3. 點擊「Add New...」→「Project」

4. 選擇你的 Repository

5. 確認設定(通常不需要改):
   - Framework Preset: Create React App
   - Build Command: npm run build
   - Output Directory: build

6. 點擊「Deploy」
Code language: PHP (php)

部署成功後

你會看到:

🎉 Congratulations!
Your project has been deployed to Vercel.

Production: https://my-react-app.vercel.app
Code language: JavaScript (javascript)

從現在開始,每次 push 到 main,網站就會自動更新。

Vercel 的建置設定

雖然 Vercel 會自動偵測設定,但有時你需要手動調整:

Project Settings → General

Framework Preset: Create React App(或 Vite)
Build Command: npm run build
Output Directory: build(CRA)或 dist(Vite)
Install Command: npm install

覆寫設定:vercel.json

你也可以在專案根目錄建立 vercel.json 來自訂設定:

{
  "buildCommand": "npm run build",
  "outputDirectory": "build",
  "framework": "create-react-app"
}
Code language: JSON / JSON with Comments (json)

這個檔案會跟著程式碼一起版本控制,團隊成員就能用相同的設定。

常見問題排解

Build 失敗

查看 Vercel Dashboard 的 Deployment Logs:

常見原因:
1. 缺少相依套件 → 檢查 package.json
2. 環境變數未設定 → 到 Settings 新增
3. Node.js 版本問題 → 在 Settings 指定版本
Code language: CSS (css)

環境變數沒吃到

確認幾件事:

1. 變數名稱是否正確(REACT_APP_ 或 VITE_ 開頭)
2. 是否有勾選正確的 Environment
3. 是否需要重新部署(有些變數需要 redeploy 才會生效)

自訂網域無法連線

1. 檢查 DNS 記錄是否正確
2. 等待 DNS 傳播(最多 48 小時)
3. 確認 SSL 憑證已核發

與 GitHub Actions 的關係

你可能會問:既然 Vercel 自己會自動部署,還需要 GitHub Actions 嗎?

答案是:看情況。

純前端專案 → Vercel 內建 CI/CD 就夠了
需要自訂流程 → 可以搭配 GitHub Actions

例如,你想要在部署前執行更完整的測試,可以這樣搭配:

# .github/workflows/test.yml
name: Test Before Deploy

on:
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm test
      - run: npm run lint
Code language: PHP (php)

這樣 GitHub Actions 負責測試,Vercel 負責部署,各司其職。

小結

這篇你學會了:

  1. Vercel 的優勢:零配置、自動 HTTPS、全球 CDN
  2. 連結 GitHub:Import 專案,三步驟上線
  3. 自動部署:Push to main = Production,PR = Preview
  4. 環境變數:在 Dashboard 設定,支援不同環境
  5. 自訂網域:新增 DNS 記錄,自動 SSL

下一篇,我們會學習如何用 GitHub Actions 部署後端 API 到 Render,建立完整的前後端部署流程。


延伸閱讀

進階測驗:React 前端自動部署到 Vercel

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 你的團隊正在開發一個 React 專案,需要在 Production 環境連接正式 API,但在 PR 預覽時連接測試 API。你應該如何設定 Vercel 環境變數? 情境題

  • A. 在程式碼中使用 if-else 判斷,根據網址決定使用哪個 API
  • B. 在 Vercel Dashboard 的 Environment Variables 設定,分別為 Production 和 Preview 環境設定不同的 REACT_APP_API_URL 值
  • C. 建立兩個不同的 Vercel 專案,一個用於 Production,一個用於 Preview
  • D. 在 vercel.json 中寫入兩組不同的 API 網址

2. 同事發現他的 React 專案部署後,環境變數讀不到,程式中 process.env.API_URL 的值是 undefined。可能的原因是什麼? 錯誤診斷

// 專案程式碼 const apiUrl = process.env.API_URL; console.log(apiUrl); // undefined // Vercel Dashboard 設定 // Name: API_URL // Value: https://api.example.com // Environment: Production ✓
  • A. Vercel Dashboard 的設定沒有儲存成功
  • B. 需要先執行 npm run build 才會載入環境變數
  • C. Create React App 專案的環境變數必須以 REACT_APP_ 開頭才能被讀取
  • D. 環境變數只能在伺服器端使用,前端無法讀取

3. 你想為公司網站設定自訂網域 mycompany.com(根網域)。在 Vercel Dashboard 新增網域後,你需要到 DNS 服務商新增什麼記錄? 情境題

  • A. CNAME 記錄,值設為 cname.vercel-dns.com
  • B. A 記錄,值設為 76.76.21.21
  • C. TXT 記錄,值設為 Vercel 提供的驗證碼
  • D. MX 記錄,值設為 mail.vercel.com

4. 你的 React 專案在 Vercel 上 Build 失敗,查看 Deployment Logs 看到以下錯誤。最可能的解決方式是什麼? 錯誤診斷

Error: Cannot find module ‘axios’ npm ERR! code ENOENT npm ERR! syscall open npm ERR! path /vercel/path0/node_modules/axios
  • A. 檢查 package.json 是否有將 axios 列入 dependencies,確保相依套件完整
  • B. 在 Vercel Settings 指定正確的 Node.js 版本
  • C. 新增環境變數 AXIOS_ENABLED=true
  • D. 在 vercel.json 中設定 installCommand: “npm install axios”

5. 你的團隊希望在 PR 合併到 main 之前,除了 Vercel 的 Preview 部署外,還要執行完整的測試和 Lint 檢查。最佳做法是什麼? 情境題

  • A. 在 vercel.json 中新增 preinstall script 執行測試
  • B. 關閉 Vercel 的自動部署,改用手動部署
  • C. 搭配 GitHub Actions,建立 workflow 在 PR 時執行 npm test 和 npm run lint,讓 GitHub Actions 負責測試,Vercel 負責部署
  • D. 在 Vercel Dashboard 的 Build Command 中加入測試指令

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *