在前兩天,我們已經討論了 Monorepo 與 Angular Library,並學習如何建立共用的元件函式庫。
今天,我們要進一步探討 Library 的版本管理,以及如何透過 Verdaccio 建立一個公司內部的私有套件管理平台,來確保團隊順暢的開發流程。
當專案越來越大時,Library 的維護就會變得複雜。如果沒有良好的版本策略,很容易出現以下情況:
這就是為什麼要引入 Semantic Versioning (語意化版本號, SemVer)。
通常版本號會遵守 SemVer 規範:
主版號(Major).次版號(Minor).修訂號(Patch)
例如:
1.0.0
→ 初始穩定版本1.1.0
→ 新增功能(仍相容)1.1.1
→ 修正 bug2.0.0
→ 發生不相容改動在 package.json
中,會透過版本號範圍來指定可接受的版本:
"^1.2.3"
→ 允許更新 Minor 與 Patch(例如 1.5.0、1.2.9)"~1.2.3"
→ 只允許更新 Patch(例如 1.2.4,但不會到 1.3.0)假設我們已經建立好 @my-company/my-lib
,如果直接 npm publish
到公開 npm registry,任何人都能安裝,這對公司內部專案顯然不合適。
因此我們需要一個 私有套件管理機制,讓套件只在公司或團隊內部流通。這時候 Verdaccio 就派上用場。
適用場景:
Verdaccio 是一個輕量級的私有 npm registry:
在本機或伺服器上執行:
npm install -g verdaccio
# 啟動 Verdaccio
verdaccio
預設會開在 http://localhost:4873
,並提供一個 Web UI,可以檢視與管理套件。
假設我們已經在 dist/my-lib/
下有建置結果,就可以發布到私有雲上,請記得要啟動 Verdaccio 才能使用喔!
cd dist/my-lib
# 登入 Verdaccio
npm adduser --registry http://localhost:4873/
# 發佈套件
npm publish --registry http://localhost:4873/
在其他應用專案中,只需設定 npm registry 並安裝套件,請記得要啟動 Verdaccio 才能使用喔!容易踩雷再說一次。
npm set registry http://localhost:4873
npm install @my-company/my-lib
即可像使用一般 npm 套件一樣引用:
import { MyButtonComponent } from '@my-company/my-lib'
不過如果只是單純測試的話,之後記得改回原本的 npm 位置 ,或是改成 npm install @my-company/my-lib --registry 私有雲位置
來下載,才不會忘記自己設過什麼,出了問題比較好追蹤。
# 恢復預設 npm registry
npm set registry https://registry.npmjs.org/
從 Day 28 Monorepo 到 Day 29 Angular Library,再到今天的 Day 30 Verdaccio 私有套件管理,我們完成了一條完整的前端共用元件生命週期:
這樣一來,不論團隊規模多大,都能保持 一致性、可維護性與安全性。
未來若要延伸學習,可以進一步往這些方向:
本系列就先告一段落,希望這 30 天的內容對大家工作上有幫助。