cover

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 會明確告訴你:「路由這樣寫、狀態這樣管、測試這樣跑,照我的規矩來。」你不再是老大——框架才是。它定義了整個應用程式的骨架,你只是在它的框架裡填內容。

PackageLibraryFramework
規模小,單一問題中,某個領域大,完整方案
範例dayjsuuidjQuery、AxiosAngular、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 本體。太執著於分類反而奇怪——搞懂背後的設計哲學比較重要。


框架是別人踩過的坑的結晶。你可以不用框架,前提是你願意自己踩一遍那些坑。

延伸閱讀