軟體工程基本功:用 Semver 駕馭版本控制的藝術
· 閱讀時間約 9 分鐘

論版本號的重要性,從一個掉進坑裡的故事說起
我剛社會第一年的時候,對套件版本隱藏的相容性問題沒什麼概念,還記得當時我看到一個平常在用的套件發布了最新版,心想:
「 哦~有新版本釋出了!第五版耶,官網上描述的新功能看起來挺酷的,更新來玩玩看好了。」
我就不假思索,直接把我專案裡原本用的第四版套件升級到第五版。誰知道這麼一升級,我整個專案就跑不起來了。翻了一下文件才發現,原本我用的某些 API 在第五版已經被移除了,甚至連套件的引入方式都整個改掉了。
舉例來說,原本這樣寫是沒問題的:
import functionA from 'some-library';
但新版本強制使用 named import,變成要這樣寫才行:
import { functionA } from 'some-library';
後來我才知道,這是因為這個套件升級的是「大版號(Major)」,代表它可能包含破壞性變更(breaking changes),使用方式可能會跟之前不一樣。也正是從這次經驗開始,我才慢慢了解版本號其實不是只是個數字而已,而是有一套設計邏輯與意圖,背後還有「語意化版本(Semantic Versioning)」這個規則存在。
後來,我在工作上也接觸到了開發與維護套件的任務,成為了套件與原始碼的維護方,Semantic Versioning 這套軟體版本管理的原則變得更加重要,因為套件版本管理的好與壞會直接影響到團隊協作、使用者體驗,甚至是產品的穩定性。這篇文章我想帶大家一起來探索 Semantic Versioning 的核心概念與我在實際維護套件時的一些經驗,礙於篇幅可能沒辦法涵蓋到 Semantic Versioning 的所有細節,建議讀者有時間的話可以搭配 Semantic Versioning 2.0.0 官方文件 一起閱讀。