為什麼大家都改用 Vite?React 最強開發工具誕生!

更新日期: 2025 年 4 月 9 日

前言:CRA 已經不夠用了?

在 React 剛興起的時候,Create React App(CRA)是很多前端新手的第一站。

它一行指令就能跑起來,幫我們把 Babel、Webpack、ESLint、環境變數……這些麻煩事都打包處理好了。

但你可能也遇過這些情況:

  • 開發時每次改檔都要等個幾秒才會更新畫面
  • 想改個 webpack 設定,結果被 eject 嚇退
  • 項目越大,啟動越慢,連裝個第三方 lib 都讓人心累

這些痛點,讓越來越多開發者開始尋找「更快、更輕、更可控」的選擇——這就是 Vite 登場的時刻。


Vite 是什麼?為什麼這麼快?

Vite 的設計理念:不再「一開始就打包全部」

Vite(唸作 /vit/,像是 “vite-ality” 的 vite)是由 Vue.js 的作者 Evan You 所設計的一套「現代化前端開發工具」,目標是解決傳統打包工具在開發階段的痛點,像是:

  • 專案越大,啟動越慢
  • 每改一行程式碼,就要等上好幾秒才會反映在畫面上(Hot Module Replacement 效能差)

這些問題,在過去使用 Webpack 為基礎的 CRA(Create React App)非常常見。

舊的做法:一開始就把整個專案打包一次

以 Webpack 為代表的傳統工具,會在開發一開始就:

  1. 把整個專案所有的 JS、CSS、圖片模組全數讀進來
  2. 一次性「打包合併」成瀏覽器可執行的檔案
  3. 用本地開發伺服器啟動,並在你改檔時重編打包

這麼做有一個根本問題:就算你今天只要修改 App.jsx,Webpack 也要重新解析一大堆沒改的檔案,這就是為什麼開發起來會覺得「拖、卡、等很久」。


Vite 的做法:只處理你用到的部分

Vite 的核心想法是:「不要一次處理全部,只處理你眼前需要的。

Vite 能做到「啟動快」、「熱更新快」的秘密,來自它在開發階段的三大關鍵設計:

🧩 1. 善用瀏覽器原生的 ES Modules(ESM)支援

過去我們寫前端時,模組系統(像是 import React from 'react')其實是由 Webpack 幫你打包整理的,瀏覽器原本是看不懂這些語法的。

但現在的瀏覽器(Chrome、Edge、Firefox)已經原生支援 ESM(ES Modules),可以像後端那樣用 import/export,並「一個一個地」透過 HTTP 載入模組。

👉 Vite 就利用這點,跳過了「一開始全部打包」的流程

  • 每個 .js/.jsx/.ts 檔案都當成「獨立模組」
  • 只有當瀏覽器打開畫面、遇到 import 指令時,才會用 HTTP 向開發伺服器請求那個模組
  • 需要什麼才給什麼,不會一次打包整個專案

🧠 比喻一下:Webpack 像是煮一桌滿漢全席,即使你只想吃一碗麵;

而 Vite 是點餐制,客戶(瀏覽器)叫什麼,廚房(開發伺服器)才現做給你。

🔄 2. 依賴預編譯(dependency pre-bundling)

你可能會想:「如果每個模組都用 HTTP 載,那我引入 React、Lodash、axios 是不是也要一個一個請求?」

這樣其實會很慢,所以 Vite 在啟動時會做一個重要動作:

🔧 先幫你把第三方套件(node_modules 裡的東西)一次預編譯好

這個動作叫做 dependency pre-bundling,由 esbuild 來完成。舉個例子:

  • 你專案用到 reactreact-domreact-router-dom
  • Vite 啟動時會用 esbuild 把它們打包成一份快取檔
  • 之後開發過程中都不需要再重編這些套件,直接讀取快取就好,節省大量等待時間

💡 為什麼只預編譯「套件」而不是全部程式?

因為這些套件內容幾乎不會在開發時變動,預處理一次就能穩定服役,超有效率。

⚡ 3. esbuild 的極速轉譯(用 Go 語言打造)

Vite 的超高速度背後功臣之一,就是 esbuild——一個用 Go 語言寫成的打包工具

相比於 Webpack:

項目Webpackesbuild
編寫語言JavaScriptGo
執行方式單執行緒多執行緒
速度表現普通快上 10~100 倍
處理檔案類型JSX、TS、CSS 等同上,但速度更快

在開發階段,每次你改 .jsx.ts 檔案,esbuild 都能幾乎即時地把它轉成瀏覽器能執行的 JavaScript。這就是為什麼 Vite 的畫面更新快到像「沒在等待」一樣。

這三個加起來,就是 Vite 開發體驗的核心優勢

功能原因
快速啟動不打包所有模組,只載入瀏覽器當下需要的
模組即時更新(Hot Reload)檔案變動只處理單一模組,無需整包重編
套件載入快又穩第三方依賴預先用 esbuild 編譯過一次,快取處理
編譯速度快得驚人esbuild 使用 Go + 多執行緒處理,效率遠勝 JS 工具鏈

Vite 的技術架構:兩階段處理,讓開發快又穩

Vite 的設計核心在於 把「開發階段」和「建置階段」完全分開處理

針對不同目的使用最合適的工具,既能確保開發體驗極致流暢,又能在上線時產出最小、最快、最乾淨的 bundle。

階段使用工具主要任務處理方式說明
開發階段esbuild將 JSX / TS 等語法快速轉成瀏覽器可讀的格式不進行打包,只做轉譯,讓模組能即時載入
建置階段Rollup將所有模組整理打包,壓縮、優化上線資源執行 Tree-shaking、代碼壓縮等優化動作

開發階段:只做「轉換」,不做「打包」

在開發階段,速度是第一要務。你需要的是:

  • 修改 .jsx 檔後能立即看到畫面變化
  • 瀏覽器能夠快速取得你所撰寫的模組
  • 開發伺服器能「即時」幫你轉換模組內容,而不是等待打包整包再重新載入

Vite 的解法是:

  • 使用 esbuild 將 TypeScript、JSX、SCSS 等轉譯成瀏覽器可理解的原生 JavaScript/CSS
  • 每一個模組都是「獨立存在的檔案」,使用 HTTP 請求逐一載入(符合 ES Modules 機制)
  • 不打包、不合併,讓開發速度快得像按下即現 ✨

建置階段:正式「打包」,優化上線資源

開發完成後,你需要的是一個:

  • 檔案數量少(減少 HTTP 請求)
  • 檔案大小小(降低載入延遲)
  • 沒有沒用到的程式碼(透過 Tree-shaking 移除)
  • 壓縮過的 JS/CSS/圖片檔案

這時 Vite 會切換到「建置模式」,改用 Rollup

  • 將整個專案的依賴、模組、靜態資源全部收斂打包
  • 用 Rollup 強大的 Tree-shaking 移除未使用的程式碼
  • 壓縮、合併、產出最終部署用的 dist/ 資料夾

延伸補充:為什麼 Vite 要這樣「分兩段跑」?

這就是 Vite 聰明的地方:它知道「開發」和「上線」有完全不同的需求,所以選擇最適合每個階段的工具和策略。

比喻類比說明
📓 開發就像是寫筆記快速輸入、即時看到內容變化,格式美不美先放一邊,重點是速度要夠快
📘 建置就像是出書要整理格式、潤稿排版、挑版面、上光面,最終製作出一本印刷級的精緻成品

小節:兩段式處理才是現代開發的關鍵

這樣的架構讓 Vite 同時做到:

  • 開發秒開、秒改、秒回饋,不讓你浪費時間等打包
  • 上線時又能產出高效能的精簡檔案,提升整體載入效能

這不僅改寫了前端開發體驗,更成為現代前端工具的新標準。

無論你寫的是 React、Vue、Svelte 還是 Vanilla JS,Vite 都是開發體驗最棒的選擇之一。


一個指令就開跑!建立 React 專案超簡單

在過去,我們可能需要花上十幾二十分鐘手動設定 Webpack、Babel、開發伺服器等環境,才能跑起一個 React 專案。

但現在有了 Vite,只要一個指令,就能讓你 秒速建立好一個現代化 React 開發環境,連專案結構都幫你準備好了!

步驟一:用 Vite 建立新專案

打開終端機(Terminal),執行以下指令:

npm create vite@latest my-app -- --template react

🧐 這行指令在做什麼?

  • npm create vite@latest:啟動 Vite 官方的專案建立工具(使用最新版)
  • my-app:你要建立的資料夾名稱(可自行更換)
  • --template react:指定使用「React 模板」,內建 JSX、React 設定檔與必要依賴

執行後,它會出現一些提示(例如選擇框架、模板),照著操作即可,很快就會看到:

 Scaffolding project in ./my-app...
 Done. Now run:

  cd my-app
  npm install
  npm run dev

步驟二:進入資料夾並安裝依賴

照著提示輸入以下指令:

cd my-app       # 進入新建立的專案資料夾
npm install     # 安裝所有依賴(React, Vite, Babel 等等)

這個階段會幫你安裝好開發需要的所有 npm 套件。大概幾十秒到一分鐘內完成(依網速與套件版本而異)。

步驟三:啟動開發伺服器

安裝完畢後,輸入:

npm run dev

馬上就會啟動 Vite 的開發伺服器,你會看到類似這樣的訊息:

  VITE vX.X.X  ready in 300ms

    Local:   http://localhost:5173/

👉 打開瀏覽器進入 http://localhost:5173/,你就能看到 React 預設畫面成功跑起來!

為什麼這麼快?

  • 沒有繁雜的 Webpack 設定
  • 使用 esbuild 快速轉檔,開發伺服器幾乎是秒啟動
  • 支援 模組熱更新(HMR):改程式不需手動刷新頁面,畫面自動更新

建立成功後的專案結構簡介

my-app/
├── index.html             # 專案入口 HTML
├── package.json           # 專案描述與依賴管理
├── vite.config.js         # Vite 的設定檔(可選)
├── src/
   ├── main.jsx           # 程式進入點(ReactDOM.render)
   └── App.jsx            # 主要元件(Hello Vite + React)
└── node_modules/          # 安裝好的第三方套件(自動產生)

整個架構乾淨、清楚、沒有多餘 boilerplate,讓你可以專心寫程式,而不是處理工具設定。


Vite 的貼心功能一次到位

功能CRAVite
JSX 支援
TypeScript
SCSS / CSS Modules
環境變數 .env
圖片 / 靜態資源
開發伺服器快
即時模組熱更新(HMR)⚠️ 慢
插件系統擴充普通非常靈活(像是 vite-plugin-mock)

Vite 幾乎內建了 CRA 常用的所有功能,還更快、更簡潔、更自由。

🧾 CRA vs Vite 總比較:誰適合你?

比較項目CRAVite
啟動速度較慢(Webpack 全打包)超快(模組即時載入)
編輯熱更新速度可能卡頓秒更新
自訂彈性要 eject 才能改設定設定開放,直接調整 vite.config.ts
社群與資源穩定但已停止主動開發活躍成長中,插件多
適合的專案類型初學者簡單專案各類中大型專案、新技術堆疊

結語:為什麼大家都選 Vite?

Vite 就像是你期待已久的開發神隊友:

  • 不囉嗦,幾秒就開跑
  • 不難搞,設定好懂好改
  • 不吝嗇,內建支援超齊全

不論你是 React 新手,還是 CRA 的老用戶,只要你開始用 Vite,一定會有「早知道就用這個」的感覺。

這也是為什麼越來越多前端框架(甚至包括 Astro、SvelteKit)都選擇把 Vite 當作底層工具。

Similar Posts

發佈留言

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