NPM package.json 依賴版本號寫法

紀錄Npm package.json 依賴版本號寫法基礎概念

  • 是甚麼
  • 有甚麼用
  • 如何使用

因為在工作中最近在嘗試升級node版本,npm install 之後遇到依賴套件版本升級導致樣式跑版,有略研究一下版本號的寫法如何影響套件的版本升級策略,想要以這篇文章做個紀錄及整理所學。

想要了解package 依賴版本號應該先了解一下
目前主流的Node套件管理工具 Npm

NPM(全稱 Node Package Manager,即「node套件管理器」)是Node.js預設的、用JavaScript編寫的軟體套件管理系統。

NPM 由3個元件組成:

  • 網站 : 使用該網站發現包(構建代碼塊),設置個人資料以及管理您的npm體驗的其他方面。例如,您可以設置Orgs(組織)來管理對公共或私有包的訪問。
  • 指令介面 (CLI) : 該 CLI 從終端中運行。這是大多數開發人員與 npm 交互的方式。
  • 註冊表 (registry) : 該註冊表是 JavaScript 的軟件和周圍的元信息的大型公共數據庫。

npm會隨著Node.js自動安裝。npm模組儲存庫提供了一個名為「registry」的查詢服務,使用者可通過原生的npm命令下載並安裝指定模組。此外使用者也可以通過npm把自己設計的模組分發到registry上面。

npm 可以管理作為特定項目的本地依賴項的包,以及全局安裝的 JavaScript 工具。當用作本地項目的依賴管理器時,npm 可以通過 package.json 文件在一條命令中安裝項目的所有依賴項。在 package.json 文件中,每個依賴項都可以使用語義版本控制方案指定一系列有效版本,從而允許開發人員自動更新他們的包,同時避免不必要的破壞性更改。npm 還為開發人員提供版本衝突工具,以使用特定版本標記他們的包。npm 還提供了 package-lock.json文件,其中包含項目在評估 package.json 中的語義版本控制後使用的確切版本的條目。

是甚麼

這次主要要分享的是 package.json 裡面依賴的版本號設定及升級策略,所以會先介紹一下 語義版本控制,因為裡面的版本都是依照此規則來定義。

語義版本控制

版本號依照格式 MAJOR.MINOR.PATCH :

  1. MAJOR version : 當與舊版不相容的API調整,使用相同API可能會導致錯誤。
  2. MINOR version : 當增加了API功能而且會相容舊版。
  3. PATCH version : 當套件只進行基本的 bugfix ,沒有新增什麼功能或特色。

預發佈版本 and build metadata版本 可用來擴展 MAJOR.MINOR.PATCH 格式,ex: 0.3.0+20190114.6。

套件版本升級策略
  • version Must match version exactly
  • >version Must be greater than version
  • >=version etc
  • <version
  • <=version
  • ~version “Approximately equivalent to version” See semver
  • ^version “Compatible with version” See semver
  • 1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0
  • http://... See ‘URLs as Dependencies’ below
  • * Matches any version
  • "" (just an empty string) Same as *
  • version1 - version2 Same as >=version1 <=version2.
  • range1 || range2 Passes if either range1 or range2 are satisfied.
  • git... See ‘Git URLs as Dependencies’ below
  • user/repo See ‘GitHub URLs’ below
  • tag A specific version tagged and published as tag See npm dist-tag
  • path/path/path See Local Paths below

以下的版本升級策略都是有效的

{
  "dependencies": {
    "foo": "1.0.0 - 2.9999.9999",
    "bar": ">=1.0.2 <2.1.2",
    "baz": ">1.0.2 <=2.3.4",
    "boo": "2.0.1",
    "qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
    "asd": "http://asdf.com/asdf.tar.gz",
    "til": "~1.2",
    "elf": "~1.2.3",
    "two": "2.x",
    "thr": "3.3.x",
    "lat": "latest",
    "dyl": "file:../dyl"
  }
}

有甚麼用

希望理解的內容沒有錯誤
以下是所有參考的資料
(內容是參考資料理解整理後的產物,有興趣研究或是覺得文章內容不足的大大可以再研究分享,感謝~)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *