package.json管理依賴包版本詳解
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怎么識別依賴版本
將按下述代碼進(jìn)行闡釋:
"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:安裝最新的穩(wěn)定版本

例如"express": "latest",可以安裝4.18.1 (2022.06.13最新版本)。
*:安裝最新發(fā)布的版本,不一定是穩(wěn)定版本

例如"mongoose": "*",可以安裝6.0.0-rc2、3.9.7等。
Git URL:使用Git上發(fā)布的包
引用格式: <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]
"test": "git+ssh://git@github.com:npm/cli.git#v1.0.27"
不要太相信npm包的版本號
如題,這個是血的教訓(xùn)換來的經(jīng)驗。
筆者在使用system.js時,使用的版本限制是:system.js: "^6.3.2"。
在安裝依賴的時候,意外安裝了> 6.3.2的版本,導(dǎo)致項目運行出錯。
原因就是system.js作者,沒有按照semver規(guī)范,進(jìn)行版本號命名,導(dǎo)致筆者的項目,引入了不可向下兼容的更新,進(jìn)而使項目運行出錯。
dependencies、devDependencies與peerDependencies
dependencies
生產(chǎn)環(huán)境中使用到的依賴,統(tǒng)一安裝在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聲明,則用戶安裝當(dāng)前工具包后,運行會報錯。
因為devDependencies字段聲明的依賴,在npm install 工具包時,是不會安裝的。
必須在dependencies字段中聲明,才會被安裝。
devDependencies
生產(chǎn)環(huán)境不需要使用的依賴,都需要安裝在peerDependencies下。
因為生產(chǎn)環(huán)境下,是不會安裝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是筆者用于規(guī)范Git提交規(guī)范的依賴包,只在開發(fā)環(huán)境中使用,所以在devDependencies中聲明。
peerDependencies
當(dāng)開發(fā)一些插件和工具包時,對使用方的運行環(huán)境的依賴包版本有要求,可以使用peerDependencies字段進(jìn)行聲明。
舉個例子:
{
"name": "tea-latte",
"version": "1.3.5",
"peerDependencies": {
"tea": "2.x"
}
}
當(dāng)前工具tea-latte,依賴tea包。而且,要求tea包是主版本2。
當(dāng)不滿足要求時,控制臺會進(jìn)行報錯處理。
注意
npm v7版本, peerDependencies會默認(rèn)安裝。
npm v3 到 npm v6版本, peerDependencies不會自動安裝。
參考
以上就是package.json管理依賴包版本詳解的詳細(xì)內(nèi)容,更多關(guān)于package.json管理依賴包版本的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript中的appendChild()方法示例詳解
這篇文章主要介紹了JavaScript中的appendChild()方法,appendChild()方法是向節(jié)點添加最后一個子節(jié)點,也可以使用此方法從一個元素向另一個元素移動元素,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Tesseract.js使用純js實現(xiàn)的OCR文字識別
Tesseract.js是流行的Tesseract OCR引擎的純Javascript端口,這個庫支持100多種語言,自動文本定位和腳本檢測,一個簡單的界面,用于閱讀段落、單詞和字符邊界框,Tesseract.js既可以在瀏覽器中運行,也可以在帶有NodeJS的服務(wù)器上運行2023-10-10
微信小程序通過自定義animate-numbers組件實現(xiàn)進(jìn)入頁面時數(shù)字跳動效果
文章介紹了如何在微信小程序中實現(xiàn)進(jìn)入頁面時的數(shù)字跳動效果,通過自定義一個名為`animate-numbers`的組件來實現(xiàn)這一功能,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01
Cropper.js進(jìn)階實現(xiàn)圖片旋轉(zhuǎn)裁剪處理功能示例
layui實現(xiàn)數(shù)據(jù)表格點擊搜索功能
解決uni-app報錯Error:?read?EBADF?at?Pipe?.?onStreamRead...

