首頁  >  文章  >  web前端  >  聊聊如何使用package.json對依賴套件進行版本管理

聊聊如何使用package.json對依賴套件進行版本管理

青灯夜游
青灯夜游轉載
2022-08-09 15:08:492752瀏覽

這篇文章聊聊前端專案的實戰中,是如何使用package.json對依賴套件進行版本管理的。 不同規則,對依賴的管理會產生什麼影響。

聊聊如何使用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怎麼辨識依賴版本

將按下述代碼進行解釋:

"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.13.0.2

  • #latest:安裝最新的穩定版本

聊聊如何使用package.json對依賴套件進行版本管理

  • 例如"express": "latest",可以安裝4.18.1  (2022.06.13最新版本)。

  • #*:安裝最新發布的版本,不一定是穩定版本

聊聊如何使用package.json對依賴套件進行版本管理

  • #例如
  • "mongoose": "*"

    ,可以安裝6.0.0-rc2

    3.9.7

    等。

Git URL

:使用Git上發佈的套件引用格式:

://[[:]@][:][:][/][# | #semver:]

"test": "git+ssh://git@github.com:npm/cli.git#v1.0.27"

延伸閱讀:

npm docs - dependencies

#不要太相信npm套件的版本號碼!

如題,這個是血的教訓換來的經驗。筆者在使用

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

生产环境不需要使用的依赖,都需要安装在devDependencies下。
因为生产环境下,是不会安装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不会自动安装。

更多node相关知识,请访问:nodejs 教程

以上是聊聊如何使用package.json對依賴套件進行版本管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除