Create React App 是什麼?優點與限制完整解析
更新日期: 2025 年 4 月 9 日
《React 開發環境演進史:從 Webpack 到 Vite》:
前言:解決痛點的「懶人包」,Create React App 出場!
還記得我們在上一篇介紹的 React 開發歷史嗎?
從最早的手動安裝 Webpack、Babel,到一堆 .babelrc
、webpack.config.js
配置地獄,新手根本快投降。
就在大家快崩潰的時候,Facebook 推出了 Create React App(CRA)。
只要一行指令,就能快速建立一個完整的 React 開發環境,開箱即用,開發者簡直感動到落淚。
但 CRA 真的是完美解決方案嗎?又為什麼越來越多人不用了?這篇我們一次講清楚。
一鍵搞定開發環境:Create React App 是什麼?
Create React App(CRA)是由 Facebook 官方推出的 React 懶人包專案生成工具。
目的是幫開發者省下繁瑣的開發環境設定,讓你一開始就能專注寫 React,而不是被一堆工具鏈搞得暈頭轉向。
在沒有 CRA 的年代,開發 React 專案意味著要自己安裝 Webpack、Babel,處理一大堆設定檔、loader、plugin,還得想辦法讓開發伺服器支援熱更新。
對新手來說,光是讓畫面跑起來就是一場惡夢。
CRA 的出現,改變了這一切。
它幫你把這些複雜的東西都「打包」起來,只要一行指令,就能幫你建立一個功能完備的 React 專案,開箱即用、0 設定,堪稱 React 新手的救星。
使用 CRA 建立 React 專案:只要三步
npx create-react-app my-app
cd my-app
npm start
🤔 npx
是什麼?它和 npm
有什麼不同?
✅ 一句話總結:
npm
是用來安裝工具,npx
是用來執行(臨時用)工具,不一定要安裝。
🧩 具體差別比較:
指令 | 是否安裝工具 | 工具去哪了? | 適合用情境 |
---|---|---|---|
npm | ✅ 會安裝 | 安裝到 node_modules/ | 工具你要常常用、長期維護 |
npx | ❌ 不安裝(或臨時安裝) | 用完就自動清掉 | 工具只要用一次、臨時用 |
🚧 實際例子:create-react-app
怎麼用 npm 跟 npx?
✅ 方法一:使用 npx
(臨時用、最推薦)
npx create-react-app my-app<br>
這行做了什麼?
- 沒有先安裝 create-react-app
- 直接「臨時下載 → 執行 → 建好專案 → 自動清掉」
- 不會佔你電腦空間
- 不會污染你的
node_modules/
適合情境:
- 你只是想快速建立一個新專案
- 用完這個工具就不再用了
⚠️ 方法二:使用 npm
(需要先安裝)
npm install -g create-react-app
create-react-app my-app
這兩行做了什麼?
npm install -g
:把 create-react-app 安裝到你的電腦全域環境(一直存在)create-react-app my-app
:執行它來建立專案
問題是什麼?
- 要多打一行指令(先安裝)
- 如果之後不再用這工具,它還是會佔空間在你電腦裡
- 如果版本過時,你還要記得手動更新它
🧩 小比較表:用 npx
還是 npm
?
使用方式 | npx create-react-app | npm install -g create-react-app |
---|---|---|
是否需要先安裝 | ❌ 不需要 | ✅ 需要安裝一次 |
執行流程 | 一行指令直接使用 | 需要兩行(先安裝再執行) |
是否佔空間 | ❌ 用完自動刪 | ✅ 安裝在全域,需要自己刪除 |
是否會版本過時 | ❌ 每次執行抓最新 | ✅ 安裝後版本會固定,需手動更新 |
適合什麼情況 | ✅ 偶爾用、一次性工具 | ⚠️ 頻繁使用、要離線執行 |
🚨 小提醒(2024 以後)
如果你用的是 Node.js v18+,npx
的功能被整合到新版的 corepack + npm exec
裡,你也可以用:
npm exec create-react-app my-app
但目前大家還是最常見的是 npx
!
這三行指令,背後實際幫你完成了這些事:
✅ 安裝 React 相關核心套件
react
react-dom
react-scripts
(CRA 核心腳本)
✅ 安裝並設定 Webpack + Babel
- Webpack 負責模組打包、處理靜態資源
- Babel 負責把 JSX / 新版 JavaScript 語法轉成瀏覽器能跑的版本
- 都已經設定好,你不用動一行設定檔
✅ 內建開發伺服器(Dev Server)
- 本地啟動專案的 HTTP server
- 支援 Hot Module Replacement(HMR)
- 改一個檔案,畫面即時刷新,不用手動重啟
✅ 預設支援的功能包括:
類型 | CRA 是否支援 | 補充說明 |
---|---|---|
JSX / ES6 | ✅ | Babel 自動轉換 |
TypeScript | ✅(可選) | --template typescript 可建立 TS 專案 |
CSS / SCSS | ✅ | 內建 loader 處理 |
圖片資源 | ✅ | 可直接 import logo from './logo.png' 使用 |
ESLint | ✅ | 內建基本規則,保護程式碼品質 |
環境變數 | ✅ | 支援 .env 檔案管理(REACT_APP_ 開頭才會被讀取) |
PWA 功能 | ✅ | 建立時可選是否啟用 Service Worker |
小提醒:CRA 預設架構長這樣
my-app/
├─ node_modules/
├─ public/
│ └─ index.html
├─ src/
│ ├─ App.js
│ ├─ index.js
├─ .gitignore
├─ package.json
├─ README.md
public/index.html
:React app 掛載點(<div id="root">
)src/index.js
:React 的入口檔案App.js
:預設元件react-scripts
:CRA 把所有設定包在這裡
開箱即用、0 設定就能跑起來!
總結來說,CRA 幫你省下以下這些「煩人設定」:
- 不用自己裝一堆開發依賴
- 不用自己摸索 Webpack 怎麼設定 loader
- 不用管 Babel 要不要加 plugin
- 不用寫啟動 script 或設定 HMR
對於剛入門的 React 開發者來說,CRA 真的是一把入門神兵。
你只要 npm start
,就能馬上開始寫畫面,專注在寫元件、管理 state、處理資料邏輯上,而不是在那邊查什麼是 webpack.config.js
的 module.rules
。
初學者的救星:CRA 的三大優點
對剛接觸 React 的新手來說,Create React App(CRA)真的就像一個救命神器。
以下是它最關鍵的三大優點,每一個都是新手會發出「哇!也太方便了吧」的地方:
一鍵生成,超快上手
學 React 最怕的不是語法,而是:「我都還沒開始寫元件,怎麼就卡在環境設定了?」
用 CRA,你只需要這一行:
npx create-react-app my-app
它就會幫你:
- 裝好 React 與 ReactDOM
- 建立好專案資料夾與檔案架構
- 配好 Webpack 和 Babel 的設定
- 建好開發伺服器(localhost:3000)
- 連 ESLint、Service Worker 都幫你準備好了
📦 專案一生成,直接 npm start
就能跑畫面,根本不用管那些複雜的設定。你可以馬上開始寫 App.js
,畫出你第一個 React 元件!
完整支援實務中常見的開發需求
CRA 不只能跑起來,還幫你預設好一堆開發時會用到的功能。這表示你不用另外去安裝、設定一堆工具,直接用就對了:
功能 | CRA 是否支援 | 補充說明 |
---|---|---|
JSX / React 語法支援 | ✅ | 透過 Babel 預設轉譯 JSX、ES6 語法,直接用 <Component /> 沒問題 |
CSS / SCSS | ✅ | 內建 loader,可直接 import './style.css' 或 .scss |
圖片與資源處理 | ✅ | 可以直接 import logo from './logo.svg',當變數使用 |
環境變數設定 | ✅ | 支援 .env 檔案,變數只要以 REACT_APP_ 開頭即可在程式中存取 |
靜態檔案託管 | ✅ | public/ 資料夾可放 favicon、index.html、靜態圖片 |
PWA 支援 | ✅ | 可選擇啟用 Service Worker 實作離線功能 |
ESLint | ✅ | 預設就內建基本規則,幫你維持良好的程式碼風格 |
TypeScript(可選) | ✅ | 可以用 --template typescript 一鍵建立 TypeScript 專案版本 |
🛠 換句話說,它幫你想好「你還沒想到的東西」,讓你可以直接寫出符合實務需求的 React 專案。
有官方支援,社群資源超豐富
CRA 是由 React 團隊官方推出,有穩定的版本更新、清楚的文件,也因此:
- 💡 Google 上超多教學、部落格、YouTube 影片都是用 CRA 當起手式
- 🧑💻 出錯的話幾乎都能找到 Stack Overflow 上的討論
- 🧰 很多 React UI 套件也會預設支援 CRA 的使用流程
不論是剛開始學、還是要交作業、做 side project,CRA 幾乎都是最穩定、最不容易踩雷的選擇。
但也不是完美:CRA 的「黑魔法」與限制
CRA 雖然幫你包好一切,但這種「全包式」的設計也有它的副作用。當你專案變大、需求變多,你會開始發現一些問題…
想改設定?請先「eject」:代價極高
CRA 預設把 Webpack、Babel 等工具的設定都藏起來,用 react-scripts
幫你統一處理。
這對新手來說很棒,但對進階用戶來說會變成一種「黑盒子」:
❓ 想加一個自訂的 Webpack loader?
❓ 想改輸出資料夾路徑?
❓ 想支援 module alias?
👉 抱歉,要先 eject。
npm run eject
執行後 CRA 會把所有內部設定 完整展開到你的專案中。
代價是什麼?
- ⚠️ 專案變超複雜:幾百行的設定檔湧現
- ⚠️ 你要自己維護這些設定,不能再用
react-scripts
- ⚠️ 最重要的是:不可逆!eject 不能回頭!
這也讓很多人說 eject 是 CRA 的「黑魔法」——不到萬不得已,千萬不要隨便用。
性能瓶頸:大專案跑起來越來越慢
CRA 使用的打包工具是 Webpack,它在早期非常強大,但面對大型 React 專案時,就會出現不少性能問題:
問題 | 說明 |
---|---|
啟動慢 | 每次 npm start 都要花好幾秒才能啟動伺服器 |
編譯慢 | 每次存檔修改,Webpack 都會重新打包整份專案 |
HMR(熱更新) | 頁面更新有延遲,甚至會卡住不動 |
這些問題可能一開始感覺不到,但隨著你的專案變大、加入多人協作,就會越來越明顯。
🧠 小提醒:
CRA 是為「快速開始學 React」而設計的,
但當你的需求漸漸變得複雜,它就不一定夠用了。
這也是為什麼越來越多開發者開始尋找更快、更彈性的解法——而 Vite 就是其中最受歡迎的一個。
下一篇,我們就要介紹 CRA 的繼任者,也是現在最多人用的 React 開發工具。
小結:CRA 的定位與現在的角色
Create React App 曾經是 React 開發的入門神器,但如今,它已不再是唯一選項。
特點 | CRA 評價 |
---|---|
上手容易 | ✅ 超級適合新手 |
設定彈性 | ❌ 被封裝、需 eject 才能改 |
開發速度 | ❌ Webpack 加載偏慢 |
社群支援 | ✅ 超多資源可查 |
當前趨勢 | ⚠️ 漸漸被 Vite 等工具取代 |
CRA 給我們帶來「簡單啟動」的可能,但未來的開發環境,可能需要更多彈性與效率。
如果你也感受到 CRA 的限制,不妨期待一下下一篇:Vite 如何全面打敗 CRA?