什麼是 Monorepo?運用 npm workspaces 實作跨專案共用程式碼的完整教學
· 閱讀時間約 7 分鐘
在現代的前端與全端開發中,隨著產品線的擴張,我們經常會面臨「多個專案需要共用同一套程式碼」的情境。例如:一個針對使用者的主網站(Client App),以及一個針對內部員工的管理後台(Admin Panel)。這兩者雖然獨立運行,但往往需要共用相同的 UI 元件庫、API 呼叫邏輯或是型別定義。
如果在兩個專案各自複製貼上相同的程式碼,未來一旦邏輯需要修改,工程師就必須在多個專案中反覆修改,極易產生遺漏與版本不一致的錯誤。為了解決這個問題,Monorepo(單一儲存庫) 架構應運而生,而 npm workspaces 則是目前 Node.js 生態系中最容易入門的實作工具。
什麼是 Monorepo 架構?

Monorepo(Monolithic Repository)指的是將多個不同的專案(Projects)或套件(Packages)全部整合在同一個 Git 儲存庫(Repository)中進行管理。與之相對的是傳統的 Polyrepo(Multi-repo),也就是每個專案都有自己獨立的儲存庫。
Monorepo 的核心優勢
- 單一真實來源 (Single Source of Truth):所有的程式碼都在同一個樹狀結構下,確保團隊成員看到的是一致的程式碼庫。
- 輕鬆共用程式碼:跨專案引用共用模組只需要透過本地連結 (Symlink),不需要將共用模組發佈到 npm registry 就能立刻在本地端測試。
- 依賴管理一致性:能夠將第三方的依賴套件(如 React、Lodash)提升 (Hoist) 到根目錄,確保所有子專案使用的套件版本完全一致,避免版本衝突並節省硬碟空間。
- 大規模重構更容易:當共用模組的 API 發生改變時,由於依賴該模組的所有專案都在同一個儲存庫內,工程師可以一次性修改並透過 TypeScript 編譯器抓出所有潛在錯誤。
認識 npm workspaces
自從 npm v7 版本開始,npm 官方正式內建了對 Workspaces 的支援。它提供了一組 CLI 原生功能,專門用來管理多個封包(Packages)在同一個本地檔案系統內的依賴關係。只要簡單設定好根目錄的 package.json,npm 就會自動幫我們將各個子專案的依賴全部整理好,且能互相參照。
實戰教學:如何使用 npm workspaces 共用程式碼?
接下來我們將透過一個具體的範例,示範如何建立一個包含 project-a、project-b,以及一個共用模組 shared-utils 的 Monorepo。