npx astro add vercel
當你執行 npx astro add vercel 時,Astro 會假設你想利用 Vercel 的伺服器端功能(例如動態渲染、API 路由或內容保護),因此會自動進行以下配置:
- 安裝 `
@astrojs/vercel` 適配器(Adapter)。 - 在
astro.config.mjs中將output設為 'server'。
如果配置檔沒有output則需要自行設定 - 在配置中加入
adapter: vercel()。
⚙️ 為什麼會這樣設定?
在 Astro 中,output 主要有三種模式:
- static (預設)
編譯時生成純 HTML 檔案。
適用於部落格、企業官網、不需要登入功能的網站。 - server
SSR (伺服器端渲染)。每個請求都會在伺服器即時運算。
適用於個人化儀表板、需要即時資料的電商、API 接口。 - hybrid
混合模式。預設是靜態,但允許特定頁面開啟 SSR。
適用於大部分頁面是靜態,只有少數頁面(如購物車或登入頁)需要動態的專案。
🤔 我該改回來嗎?
如果你發現配置被改成了 'server',請根據你的網站類型決定:
- 如果你的網站只是靜態頁面: 你可以手動將
output改回'static'。這樣 Vercel 會將其視為純靜態網站(SSG),載入速度最快且成本最低。 - 如果你需要 SSR 功能: 維持
'server'即可,這是 Vercel 適配器的標準用法。 - 最推薦的折衷方案:
'hybrid'如果你希望大部分頁面跑得飛快(靜態),只有少部分頁面需要動態功能,請將output設為'hybrid'。
❔ 為什麼 hybrid 比較好?
- 快取效率極大化:在
hybrid模式下,你的首頁、關於我們、文章清單等不需要即時變動的頁面,會被編譯成純 HTML。在 Vercel 上,這些檔案會被放在 CDN 邊緣節點,使用者打開網站的速度是毫秒級的。 - 節省 Vercel 額度:Vercel 的 Serverless Functions 是按執行時間和次數計費的。
server模式下每一秒的瀏覽都在耗費額度;hybrid則只有進入特定動態頁面才會扣分。 - 開發彈性:你只需要在需要動態的檔案頂部加上一行程式碼即可切換:
// 在某個頁面 .astro 檔案頂部
export const prerender = false // 這頁會變成 SSR 動態渲染
🙋 既然 hybrid 兼具速度與功能,為什麼還會有 server 模式呢?
簡單來說,server 模式在處理 「以動態內容為主」 的專案時,開發效率和管理成本比 hybrid更好。
以下是 server 比 hybrid 更有優勢的幾個地方:
- 開發效率:不需要每一頁都寫
prerender = false
在hybrid模式下,預設所有頁面都是靜態的。如果你正在開發一個大型應用程式(例如:後台管理系統、社交平台),裡面有 100 個頁面都需要檢查登入狀態或串接 API,你必須在 100 個檔案 的頂部手動加上:export const prerender = false
而在server模式下,你不需要寫這行。這對於 「動態頁面遠多於靜態頁面」 的專案來說,能減少大量重複工作並避免漏寫。 - 避免「忘了關掉預渲染」的安全隱患
這是最重要的一點。在hybrid模式下,如果你忘記在某個需要「權限檢查」的頁面加上prerender = false,Astro 會在編譯時將該頁面存成靜態 HTML。
。 這可能導致敏感資料在打包時就被寫死在 HTML 裡。
。 或者導致該頁面在 Vercel 上直接繞過你的伺服器驗證邏輯,因為它被當成普通靜態檔案處理了。
。server模式則相反:它是「預設安全」,所有頁面都先經過伺服器運算,你必須主動宣告prerender = true才會變靜態。 - 縮短「打包編譯」時間(Build Time)
。hybrid模式:在部署時,Astro 會試圖模擬執行每一個頁面來生成 HTML。如果你的網站有上萬個靜態路由,這會讓npm run build跑非常久。
。server模式:因為它不預先生成 HTML,打包過程非常快,只需轉換程式碼即可。對於需要頻繁推送更新的大型專案,server模式能讓你部署得更快。 - 完整的伺服器 API 支援有些進階功能(例如:獲取使用者的真實 IP
Astro.clientAddress或處理複雜的Astro.cookies)在server模式下是「全域開啟」的。雖然hybrid也能用,但有時候會因為靜態/動態的切換邏輯導致開發時的預期行為不一致。













