---
# System prepended metadata

title: 'Modern Monorepo Toolchain: Build Systems, Task Runners & Beyond - Michael Lo'
tags: [JSDC2025]

---

# Modern Monorepo Toolchain: Build Systems, Task Runners & Beyond - Michael Lo

{%hackmd @JSDC-tw/B1loEcwJZl %}
###### tags: `JSDC2025`

Slido：https://app.sli.do/event/iKPzdYf1pbCa6boxxk4cNC

講者簡報：https://www.michaello.me/slides/2025-11-29

> 開始做筆記

Nx 最完整，但學習成本較高



使用next.js 可以推薦turborepo


config 的設定檔 nx 可以同步


nx 為10~100人用

不到十人可能用 turborepo


120 到150的 dependcy 的時候
可以用nx cloud 的 dts 來節省打包時間



可以做 MCP 讓AI直接讀你的元件庫的文件






> 聊天區

> slido QA 回答 by Michael
> 問題回答完畢摟，有任何後續問題都歡迎在各大社群上私訊我～

Q1：想問 monorepo 會怎麼區分管理不同專案的 commit？
A1：可以使用 convential commit 規範，這也是在常見的 monorepo 內使用的 commit 規範，透過 scope 區分專案，可以再延伸搭配 husky 等等來強制 commit 格式

Q2：預設套件和apps/裡面仰賴的套件有版本衝突時，會建議怎麼解決。例如：建置Nx時會預設建立TailwindCSS3供apps/..共用，但當在分別的apps/...使ShadCN時，他是仰賴TailwindCSS4，有版本衝突，會造成一些非預期的問題
A2： 我有翻了下文件我看 shadcn 他是同時支援 v3 & v4，只是 CLI 會預設安裝 v4 版本，所以你可以改用手動安裝，確保版本在 v3 也可以支援，你試試看，可以參考這篇：https://ui.shadcn.com/docs/installation/manual

Q3：想了解 monorepo 中如何管理眾多成員的 git flow，以及如何面對各個專案或需求在開發與發布順序的交織所產生的衝突？
A3：可以採用 Trunk-Based Development，搭配 Feature Flags，但還是盡可用小而頻繁地推進 PR 確保這件事減少還是最好的，接著再搭配簡報內的 codeOwner 去加速 review & merge，真的有一些時效性問題可以搭配 feature flag 來控制功能開關，但最好是不要，還是以前面兩個解決方案為主

Q4：好奇怎麼不使用 Nexus 或 JFrog 處理私有 npm？
A4：可以使用 Nexus or Jfrog 處理，只是我單純不想要多一個套件包層，想用內部統一發放的 token 為主來控管

Q5：Mono repo 會讓 CI/CD 變得很慢很複雜嗎？不同專案的分支怎麼管理？
A5：要搭配好的 monorepo nx or turborepo 的 cahce or affected 等等方式，去讓 CICD 只去跑受影響的專案就不會變慢了

Q6：如果是沒有太多共用部分，但彼此有相依性（例如用 iframe 嵌入的子系統）這也適合用 monorepo 嗎
A6：如果沒有太多共用的部分，那其實就沒有那麼適合了，建議還是有共同資源的內容出現時再去轉換，還是盡可能不要過度設計

Q7：怎麼判斷一個團隊專案已經大到值得用 Monorepo？
A7：假如你使用的工具鏈都相同的話，或是有三個以上的相關專案，我也是推薦適合使用，可以在版本控管或是升級套件時，降低重複性升級的破壞更改問題

Q8：當 Monorepo 技術棧成長到跨多個平台（如 Web、Node、Serverless）時，怎麼避免不同層之間的依賴亂掉？工具能管住嗎？
A8：可以使用 Module Boundary Rules + Tags 控制誰能，可以參考：https://nx.dev/docs/features/enforce-module-boundaries


---

{%hackmd @JSDC-tw/jsdc2025_sponsor %}