紀錄Npm package.json 依賴版本號寫法基礎概念
- 是甚麼
- 有甚麼用
- 如何使用
因為在工作中最近在嘗試升級node版本,npm install 之後遇到依賴套件版本升級導致樣式跑版,有略研究一下版本號的寫法如何影響套件的版本升級策略,想要以這篇文章做個紀錄及整理所學。
想要了解package 依賴版本號應該先了解一下
目前主流的Node套件管理工具 NpmNPM(全稱 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 :
- MAJOR version : 當與舊版不相容的API調整,使用相同API可能會導致錯誤。
- MINOR version : 當增加了API功能而且會相容舊版。
- PATCH version : 當套件只進行基本的 bugfix ,沒有新增什麼功能或特色。
預發佈版本 and build metadata版本 可用來擴展 MAJOR.MINOR.PATCH 格式,ex: 0.3.0+20190114.6。
套件版本升級策略
version
Must matchversion
exactly>version
Must be greater thanversion
>=version
etc<version
<=version
~version
“Approximately equivalent to version” See semver^version
“Compatible with version” See semver1.2.x
1.2.0, 1.2.1, etc., but not 1.3.0http://...
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’ belowuser/repo
See ‘GitHub URLs’ belowtag
A specific version tagged and published astag
Seenpm 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"
}
}
有甚麼用
希望理解的內容沒有錯誤
以下是所有參考的資料
(內容是參考資料理解整理後的產物,有興趣研究或是覺得文章內容不足的大大可以再研究分享,感謝~)