
Package、Library、Framework 差在哪?一句話:誰呼叫誰。
先講結論
Package 跟 Library 都是「你去呼叫它」,但 Framework 是「它規定你怎麼寫,然後它呼叫你的 code」。這個差異叫做 IoC(Inversion of Control,控制反轉),是區分 Library 和 Framework 最核心的分水嶺。
從 Package 到 Framework
Package 是最小單位,解決一個小問題。dayjs 處理日期、uuid 產生唯一 ID——裝了就用,不用的時候拔掉也不痛。
Library 大一點,解決某個領域的問題。jQuery 想解決原生 JS 操作 DOM 太繁瑣的問題,Lodash 提供一堆實用的工具函數。你還是老大,決定什麼時候呼叫它。
Framework 是完整的解決方案。Angular 會明確告訴你:「路由這樣寫、狀態這樣管、測試這樣跑,照我的規矩來。」你不再是老大——框架才是。它定義了整個應用程式的骨架,你只是在它的框架裡填內容。
| Package | Library | Framework | |
|---|---|---|---|
| 規模 | 小,單一問題 | 中,某個領域 | 大,完整方案 |
| 範例 | dayjs、uuid | jQuery、Axios | Angular、Laravel |
| 控制權 | 你呼叫它 | 你呼叫它 | 它呼叫你(IoC) |
| 學習成本 | 低 | 中 | 高 |
| 自由度 | 高 | 高 | 低(但換來一致性) |
React 很有趣,它自稱是 Library——因為 React 本身只管 UI 渲染。但加上 React Router、Redux、Next.js 之後,整個 Ecosystem 就是一個 Framework 了。所以 React 到底是 Library 還是 Framework 這個問題,根本是前端界的先有雞還是先有蛋。
什麼時候該用框架?
不是所有專案都需要框架,這點很重要。
適合用框架的情境:多人協作的中大型專案、需要長期維護的產品、功能複雜互動多的 SPA 或後台系統。框架的統一規範在這些場景下價值巨大。
不一定需要框架的情境:行銷活動頁(純靜態就好)、個人部落格(SSG 工具如 Astro、Quartz 就夠)、快速驗證想法的 prototype。如果專案不夠複雜,硬上框架就是 over-engineering。
我自己的經驗是,選框架不用太糾結。重點是你的團隊熟悉什麼、社群活不活躍、能不能找到人。技術本身的差異沒有你想像的那麼大。
我的理解
如果你有辦法對一件事情提出 Total Solution,那你就是 Framework。
但說真的,Package / Library / Framework 的界線模糊到不行。jQuery 說自己是 Library,但它影響了整個前端生態的寫法;React 說自己是 Library,但沒人會只用 React 本體。太執著於分類反而奇怪——搞懂背後的設計哲學比較重要。
框架是別人踩過的坑的結晶。你可以不用框架,前提是你願意自己踩一遍那些坑。