我們先說下,npm版本號定義
版本格式:X.Y.Z[-string]其含義為:
X:主版本號
Y:次版本號
Z:修正版本號
string: 先行版本號或版本編譯信息
舉個例子:
6.3.2-alpha的含義為:
主版本號6,有6次不可向下兼容的更新迭代。
次版本號3,有3次小的功能迭代。6.*.* <=6.3.2的依賴聲明,都可以安裝此新包。
修正版本號2,有2次bug修改或其他非重大功能的修改。6.*.* <=6.3.2的依賴聲明,都可以安裝此新包。
先行版本號alpha,表示處理試驗階段。
擴展閱讀:語義化版本 2.0.0
package.json怎么識別依賴版本
現在我們看看具體的代碼:
"vue": "~2.5.22", "vue-class-component": "^6.0.0", "vue-router": "3.0.1", "express": "latest", "mongoose": "*",
符號^:鎖定主版本,可更新次版本號、修正版本號和先行版本號
例如"vue-class-component": "^6.0.0",安裝依賴時,可以安裝符合6.*.* 的任意版本,只要主版本號是6即可。
符號~:鎖定主版本號和次版本號,可更新修正版本號和先行版本號
例如"vue": "~2.5.22",安裝依賴時,可以安裝符合2.5.*的任意版本。
空符號:鎖定所有版本號
例如"vue-router": "3.0.1",只能安裝版本為3.0.1的依賴包。
符號*:定義某個版本號范圍
例如vue-router": "3.0.*",可以安裝3.0固定的任意版本,比如3.0.1、3.0.2。
latest:安裝最新的穩定版本
例如"express": "latest",可以安裝4.18.1 (2022.06.13最新版本)。
*:安裝最新發布的版本,不一定是穩定版本
例如"mongoose": "*",可以安裝6.0.0-rc2、3.9.7等。
Git URL:使用Git上發布的包
引用格式: <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]
"test": "git+ssh://git@github.com:npm/cli.git#v1.0.27"
擴展閱讀:npm docs - dependencies
在這里要提醒下,請千萬不必相信npm包的版本號,這樣說就是血淚教訓啊?! ?/p>
我們知道筆者在使用system.js時,使用的版本限制是:system.js: "^6.3.2"。
在安裝依賴的時候,意外安裝了> 6.3.2的版本,導致項目運行出錯。
原因就是system.js作者,沒有按照semver規范,進行版本號命名,導致筆者的項目,引入了不可向下兼容的更新,進而使項目運行出錯。
dependencies、devDependencies與peerDependencies
dependencies
生產環境中使用到的依賴,統一安裝在dependencies下。
舉個例子:
"dependencies": { "chalk": "^2.4.2", "commander": "^3.0.0", "fs-extra": "^8.1.0", "inquirer": "^6.5.0", "mem-fs": "^1.1.3", "mem-fs-editor": "^6.0.0", "shelljs": "^0.8.3" }
在上面代碼中,可以看到筆者做的cli工具包的package.json中的片段。
shelljs用于操作文件,如果改在devDependencies聲明,則用戶安裝當前工具包后,運行會報錯。
因為devDependencies字段聲明的依賴,在npm install 工具包時,是不會安裝的。
必須在dependencies字段中聲明,才會被安裝。
devDependencies
生產環境不需要使用的依賴,都需要安裝在peerDependencies下。
因為生產環境下,是不會安裝devDependencies字段下的依賴的。
現在看看:
"devDependencies": { "@commitlint/cli": "^8.1.0", "@commitlint/config-conventional": "^8.1.0", "commitizen": "^4.0.3", "commitlint-config-cz": "^0.12.1", "cz-customizable": "^6.2.0", "standard-version": "^7.0.0" }
上述代碼,是筆者做的cli工具包的package.json中的片段。
commitizen是筆者用于規范Git提交規范的依賴包,只在開發環境中使用,所以在devDependencies中聲明。
peerDependencies
當開發一些插件和工具包時,對使用方的運行環境的依賴包版本有要求,可以使用peerDependencies字段進行聲明。
舉個例子:
{ "name": "tea-latte", "version": "1.3.5", "peerDependencies": { "tea": "2.x" } }
當前工具tea-latte,依賴tea包。而且,要求tea包是主版本2。
當不滿足要求時,控制臺會進行報錯處理。
注意
npm v7版本, peerDependencies會默認安裝。
npm v3 到 npm v6版本,peerDependencies不會自動安裝。
參考
npm Docs
語義化版本 2.0.0
本文關于package.json管理依賴包版本的詳解已講述完畢,歡迎大家關注更多后續精彩內容。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128815.html
摘要:本人菜鳥一枚,一直也沒理解這個,不過看到了就記錄一下吧,萬一哪天用到了,說不準就懂了或參數的意思是精確的安裝指定版本的模塊,細心的同學會發現字段里每個模塊版本號前面的不見鳥。。。 NPM命令詳解平時工作中經常用npm安裝,每次用的時候有些命令都要去查一次,這次就自己把這些命令整理下,讓自己可以多記住一些。對于還不知道NPM是什么的同學請自行google吧 這里我就不多BB了,主要記錄...
摘要:基礎的端到端的基準測試顯示大約比快八倍。所謂單線程,就是指一次只能完成一件任務。在服務器端,異步模式甚至是唯一的模式,因為執行環境是單線程的,如果允許同步執行所有請求,服務器性能會急劇下降,很快就會失去響應。 模塊 Node.js 提供了exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個模塊的接口,即所獲取模塊的 e...
摘要:內容結構是中列出的每個依賴項的大型列表,應安裝的特定版本,模塊的位置,驗證模塊完整性的哈希,它需要的包列表,以及依賴項列表。期望與真實行為之間的這種沖突在中引發了一個非常有趣的問題線索。此更改是作為的一部分發布的,該版本于年月日上線。 showImg(https://segmentfault.com/img/bVbkuXN?w=1440&h=1080); 想閱讀更多優質文章請猛戳Git...
摘要:深入淺出一直想致力于寫一篇關于廣義講解系統的文章,苦于時間有限,資源有限。事件驅動機制是通過內部單線程高效率地維護事件循環隊列來實現的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關于廣義講解Node.js系統的文章,苦于時間有限,資源有限。這篇文章是在結合自己的學習心得以及與行業大佬共同探討下爭對于熟練掌握JS語言后的廣義Node.js.至于為什么...
摘要:深入淺出一直想致力于寫一篇關于廣義講解系統的文章,苦于時間有限,資源有限。事件驅動機制是通過內部單線程高效率地維護事件循環隊列來實現的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關于廣義講解Node.js系統的文章,苦于時間有限,資源有限。這篇文章是在結合自己的學習心得以及與行業大佬共同探討下爭對于熟練掌握JS語言后的廣義Node.js.至于為什么...
閱讀 561·2023-03-27 18:33
閱讀 750·2023-03-26 17:27
閱讀 647·2023-03-26 17:14
閱讀 603·2023-03-17 21:13
閱讀 537·2023-03-17 08:28
閱讀 1823·2023-02-27 22:32
閱讀 1315·2023-02-27 22:27
閱讀 2199·2023-01-20 08:28