Create React App 是什麼?優點與限制完整解析

更新日期: 2025 年 4 月 9 日

前言:解決痛點的「懶人包」,Create React App 出場!

還記得我們在上一篇介紹的 React 開發歷史嗎?

從最早的手動安裝 Webpack、Babel,到一堆 .babelrcwebpack.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

這兩行做了什麼?

  1. npm install -g把 create-react-app 安裝到你的電腦全域環境(一直存在)
  2. create-react-app my-app執行它來建立專案

問題是什麼?

  • 要多打一行指令(先安裝)
  • 如果之後不再用這工具,它還是會佔空間在你電腦裡
  • 如果版本過時,你還要記得手動更新它

🧩 小比較表:用 npx 還是 npm

使用方式npx create-react-appnpm 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 / ES6Babel 自動轉換
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.jsmodule.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?

Similar Posts

發佈留言

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