語意化版本控制是一種常用於版本編號的慣例。

在 Node.js 的封包中,有一個很好的事情就是大家都同意使用語意化版本控制。

語意化版本控制的概念很簡單:所有版本都有三個數字:x.y.z

  • 第一位數字是主要版本
  • 第二位數字是次要版本
  • 第三位數字是修補版本

當你進行新版本發布時,你不能隨意將數字遞增,而是需要遵守一些規則:

  • 如果你進行了不兼容的 API 更改,則將主要版本遞增
  • 如果你以向後相容的方式新增功能,則將次要版本遞增
  • 如果你進行了向後相容的錯誤修復,則將修補版本遞增

這種慣例在各種程式語言中都被採用,並且對每個 npm 封包都很重要,因為整個系統都取決於此。

為什麼如此重要呢?

因為 npm 在我們運行 npm update 時,可以在 package.json 檔案 中使用一些規則來選擇要更新的版本。

這些規則使用以下符號:

  • ^
  • ~
  • >
  • >=
  • <
  • <=
  • =
  • -
  • ||

讓我們逐一了解這些規則:

  • ^:如果你在運行 npm update 時輸入 ^0.13.0,它可以更新到修補版本和次要版本:0.13.10.14.0,以此類推。
  • ~:如果你在運行 npm update 時輸入 ~0.13.0,它只能更新到修補版本:0.13.1 是可以的,但 0.14.0 不行。
  • >:接受高於指定版本的任何版本
  • >=:接受等於或高於指定版本的任何版本
  • <=:接受等於或低於指定版本的任何版本
  • <:接受低於指定版本的任何版本
  • =:接受精確的版本
  • -:接受一個版本範圍。例如:2.1.0 - 2.6.2
  • ||:組合多個版本集合。例如:< 2.1 || > 2.6

您可以將某些符號組合在一起,例如使用 1.0.0 || >=1.1.0 <1.2.0,以使用 1.0.0 或從 1.1.0 開始的版本,但小於 1.2.0。

還有其他一些規則:

  • 沒有符號:只接受指定的特定版本(1.2.1
  • latest:希望使用最新可用的版本