看到 CRA 正式被標成 deprecated 時,我有一種「早就知道,但真的發生還是有點感慨」的感覺。以前幾乎每份 React 入門教學都從 npx create-react-app 開始,我也曾經把它當成不必思考的標準答案。結果現在最常被問的不是怎麼用 CRA,而是它走了以後,到底該裝 Vite 還是乾脆上 Next.js。
Create React App 曾經是建立 React 專案最省事的方法,但它後來缺少積極維護,建置速度和現代工具也逐漸跟不上。React 官方因此在 2025 年正式把它標成 deprecated。
如果原本做的是登入後台或一般 SPA,Vite 通常就是最直接的接班人。它負責啟動開發環境和打包程式,路由、資料請求仍由我們自己選。Next.js 則多了檔案路由、伺服器渲染、靜態產生和後端功能,並不是每個 React 專案都需要。
簡單說,CRA 退場並不等於大家都要改用 Next.js。先看網站需要什麼:單純 SPA 可以從 Vite 開始;內容網站、電商或需要 SSR 的頁面,再考慮 Next.js 或其他 React framework。
Vite 和 Next.js 其實不是同一層
Vite 主要是建置工具,它把開發伺服器、HMR 和 production build 準備好。路由可以選 React Router,資料請求可以用原生 fetch、TanStack Query 或其他方案。自由度很高,代價是專案規模變大後,這些選擇要由團隊自己整理。
Next.js 則先幫你決定不少事情:目錄就是路由、頁面可以在伺服器產生、Metadata 和圖片處理也有官方做法。這對公開網站很方便,但若只是公司內部後台,導入整套伺服器模型未必比較省事。
SSR 也不只是 SEO。伺服器先送出 HTML,慢一點的手機通常能更早看到內容;但伺服器要多做工作,部署和快取也會複雜一些。若頁面登入後才看得到,搜尋引擎根本不是重點,CSR 往往已經很夠用。
所以我會把問題改成「這個專案只缺一個新的 CRA,還是已經需要完整框架?」前者選 Vite 很合理;後者才需要看 Next.js、React Router framework mode 等方案。
我看過比較麻煩的情況,通常不是工具選錯,而是團隊根本沒有把需求說清楚。只是要做一個登入後才能看的 CRUD 後台,卻先背上 Server Component、快取和部署 runtime;另一邊是行銷網站做到一半才發現每個頁面都要手動補 SEO 和分享圖。兩種選擇都能做完,只是會一直付出原本可以避免的成本。
如果今天從零開專案,我會先寫一張很短的清單:頁面是否公開、是否需要被搜尋、資料主要在 client 還是 server、部署環境能不能長時間跑 Node。這四題答完,通常已經比「大家最近都用什麼」更接近答案。工具可以再換,專案一開始形成的資料流和部署方式反而比較難回頭。